نحوه انجام:
1) ابتدا به منوی new رفته و یک پروژه از نوع win32 project با نام "rect1" و مقادیر پیش فرض بسازید (دقت کنید که console نباشد).
پروژه با چند فایل ساخته می شود، که ما با فایل rect1.cpp کار داریم.

2) برای رسم یک مربع ساده به این شکل عمل کنید:
در قسمت case و پیام WM_PAINT کار های گرافیکی در قسمت client یا همان قسمت سفید انجام می شود، دقت کنید که کد های گرافیکی باید مابین دو دستور BeginPaint و EndPaint نوشته شوند.

برای شروع مربعی بدون رنگ رسم می کنیم، کد را به شکل زیر تغییر دهید:


کد PHP:
case WM_PAINT:
        
hdc BeginPaint(hWnd, &ps);
        
// TODO: Add any drawing code here...
 
        
<b>Rectangle(hdc100100200200); </b// Empty
 
        
EndPaint(hWnd, &ps);
        break; 
3) حال در کنار آن مربعی با یکی از رنگ های پیش فرض سیستم رسم می کنیم:


کد PHP:
case WM_PAINT:
        
hdc BeginPaint(hWnd, &ps);
        
// TODO: Add any drawing code here...
 
        
Rectangle(hdc100100200200);  // Empty
 
        
<b>SelectObject (hdcGetStockObject (LTGRAY_BRUSH)) ;
        
Rectangle(hdc300100400200);</b>  // 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 آخر برای این است که همراه پس از انجام رسم ، قلم قبلی که پیش فرض سیستم بود انتخاب و آماده برای سایر موارد رسم بعدی شود.

پس تابع به شکل زیر تغییر داده می شود:


کد PHP:
LRESULT CALLBACK WndProc(HWND hWndUINT message,
                            
WPARAM wParamLPARAM lParam)
{
    
int wmIdwmEvent;
    
PAINTSTRUCT ps;
    
HDC hdc;
   <
b> static HBRUSH    hbrushhbrushOld; </b// must be static
 
    
switch (message)
    {
<
b>    case WM_CREATE:
        
// Create a red brush
        
hbrush CreateSolidBrush(RGB(25500));
 
        break;</
b>
 
    case 
WM_COMMAND:
          
// **...  I removed codes ... **
        
break;
 
    case 
WM_PAINT:
        
hdc BeginPaint(hWnd, &ps);
        
// TODO: Add any drawing code here...
 
        
Rectangle(hdc100100200200);  // Empty
 
        
SelectObject (hdcGetStockObject (LTGRAY_BRUSH)) ;
        
Rectangle(hdc300100400200);  // Filled by light gray color   
 
          // Select the new brush and draw<b>
        
hbrushOld = (HBRUSH)SelectObject(hdchbrush);
        
Rectangle(hdc500100600200);  </b>// Filled by light gray color<b>
        
SelectObject(hdchbrushOld); </b// select old brush
     
        
EndPaint(hWnd, &ps);
        break;
 
    case 
WM_DESTROY:
        
PostQuitMessage(0);
        <
b>DeleteObject(hbrush);</b>
 
        break;
    default:
        return 
DefWindowProc(hWndmessagewParamlParam);
    }
    return 
0;

5) سایر توابعی که می توانید از آن ها برای رسم اشکال استفاده کنید:
Ellipse ، Polygon ، RoundRect ، Pie ، Chord ، Arc ، LineTo ، Polyline و ...