3) حال در کنار آن مربعی با یکی از رنگ های پیش فرض سیستم رسم می کنیم:
کد:
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
Rectangle(hdc, 100, 100, 200, 200); // Empty
SelectObject (hdc, GetStockObject (LTGRAY_BRUSH)) ;
Rectangle(hdc, 300, 100, 400, 200); // Filled by light gray color
EndPaint(hWnd, &ps);
break;
در کد فوق با استفاده از دستور SelectObject یکی از اشیاء را مانند قلم ، مداد ، عکس و غیره را برای رنگ آمیزی و ترسیم می توانید انتخاب کنید. در این مورد ما با استفاده از تابع GetStockObject یکی از قلم های پیش فرض سیستم را انتخاب کردیم که خاکستری روشن هست. (سایر انواع : BLACK_BRUSH، HOLLOW_BRUSH ، WHITE_BRUSH ، BLACK_PEN و ....)
4) برای ساختن یک brush یا قلم دلخواه (با رنگ دلخواه) به این شکل عمل می کنیم:
- ابتدا قلم را در پیام WM_CREATE می سازیم (این پیام را خودتان در بخش case ها اضافه کنید )، هر چیزی که در بخش WM_CREATE نوشته شود در هنگام شروع برنامه قبل از هر چیزی اجرا می شود .
- از تابع CreateSolidBrush و ماکرو RGB برای ساخت قلم و رنگ استفاده می کنیم.
- hbrush از نوع HBRUSH باید قبل از switch تعریف شود و حتما static باشد چون فقط یک مرتبه در شروع برنامه مقدار دهی می شود.
- وقتی خودمان قلمی درست می کنیم باید در انتهای برنامه فضای اختصاص داده شده به آن را آزاد کنیم پس در قسمت WM_DESTROY در هنگام بستن برنامه را فراخوانی DeleteObject می کنیم .
- SelectObject آخر برای این است که همراه پس از انجام رسم ، قلم قبلی که پیش فرض سیستم بود انتخاب و آماده برای سایر موارد رسم بعدی شود.
پس تابع به شکل زیر تغییر داده می شود:
کد:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static HBRUSH hbrush, hbrushOld; // must be static
switch (message)
{
case WM_CREATE:
// Create a red brush
hbrush = CreateSolidBrush(RGB(255, 0, 0));
break;
case WM_COMMAND:
// **... I removed codes ... **
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
Rectangle(hdc, 100, 100, 200, 200); // Empty
SelectObject (hdc, GetStockObject (LTGRAY_BRUSH)) ;
Rectangle(hdc, 300, 100, 400, 200); // Filled by light gray color
// Select the new brush and draw
hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);
Rectangle(hdc, 500, 100, 600, 200); // Filled by light gray color
SelectObject(hdc, hbrushOld); // select old brush
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
DeleteObject(hbrush);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
5) سایر توابعی که می توانید از آن ها برای رسم اشکال استفاده کنید:
Ellipse ، Polygon ، RoundRect ، Pie ، Chord ، Arc ، LineTo ، Polyline و ...
پروژه نیز ضمیمه شد.
در آینده نحوه کار با mouse و keyboard برای رسم اشکال نیز توضیح داده خواهد شد.
موفق باشید