複製鏈接
請複製以下鏈接發送給好友

BeginPaint

鎖定
BeginPaint函數為指定窗口進行繪圖工作的準備,並用將和繪圖有關的信息填充到一個PAINTSTRUCT結構中。
中文名
BeginPaint
説    明
窗口進行繪圖工作的準備
函數原型
HDC BeginPaint
參    數
hwnd

BeginPaint函數原型

HDC BeginPaint(
HWND hwnd, // 窗口的句柄
LPPAINTSTRUCT lpPaint // 繪製信息
);

BeginPaint參數

hwnd:[輸入]被重繪的窗口句柄
lpPaint:[輸出]指向一個用來接收繪畫信息的PAINTSTRUCT結構

BeginPaint返回值

如果函數成功,返回值是指定窗口的“顯示設備描述表”句柄。
如果函數失敗,返回值是NULL,表明沒有得到顯示設備的內容。
Windows NT/2000/XP: 使用GetLastError得到更多的錯誤信息。

BeginPaint其他信息

BeginPaint函數自動設置顯示設備內容的剪切區域,而排除任何更新區域外的區域。該更新區域可以通過InvalidateRectInvalidateRgn函數設置,也可以是系統在改變大小、移動、創建、滾動後設置的,
亦是其他的影響客户區的操作來設置的。如果更新區域被標記為可擦除的,BeginPaint發送一個WM_ERASEBKGND消息給窗口。
一個應用程序除了響應WM_PAINT消息外,不應該調用BeginPaint。每次調用BeginPaint都應該有相應的EndPaint函數。
如果被繪畫的客户區中有一個caret(caret:插入符。是窗口客户區中的一個閃爍的線,塊,或位圖。插入符通常表示文本或圖形將被插入的地方。即一閃一閃的光標),BeginPaint自動隱藏該符號,而保證它不被擦除。
如果窗口類有一個背景刷,BeginPaint使用這個刷子來擦除更新區域的背景。

BeginPaint例子代碼

1. 你使用BeginPaint和EndPaint函數來準備和完成客户區的繪畫。BeginPaint返回一個用來繪畫的客户區的顯示設備內容的HANDLE,EndPaint終止繪畫請求,並釋放設備內容。
下面的例子中,窗口程序寫HELLO WINDOWS消息到窗口的客户區。為了使字符串在窗口第一次創建的時候可見,WinMain函數在創建和顯示窗口之後立即調用UpdateWindow,這導致一個WM_PAINT消息被立即發送到窗口程序中。
LRESULT APIENTRY WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
WCHAR* text2 = L"中文";
TextOut(hdc, 0, 0, text2, wcslen(text2));
EndPaint(hwnd, &ps);
return 0;
// Process other messages.
}
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd;
hwnd = CreateWindowEx(
// parameters
);
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
return msg.wParam;
}
2.BeginPaint在GDI,GDI+中的具體代碼示例
採用GDI繪圖
HDC hdc;//設備場景DC
PAINTSTRUCT ps;
HPEN hPen;
HPEN hPenOld;
hdc = BeginPaint( hWnd , &ps );
hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
hPenOld = (HPEN)SelectObject(hdc, hPen);
MoveToEx(hdc, 20, 10, NULL);
LineTo(hdc, 200, 100);
SelectObject(hdc, hPenOld);
DeleteObject(hPen);
EndPaint ( hWnd , &ps );
採用GDI+繪圖
HDC hdc ;
Graphics *myGraphics = new Graphics ( hdc );
Pen *myPen = new Pen (Color( 255 , 255 , 0 , 0) , 3 );
PANINTSTRUCT ps;
hdc = BeginPaint( hWnd , &ps );
myGraphics ->DrawLine ( myPen , 20 ,10 ,200 ,100);
delete myGraphics ;
delete myPen ;
EndPaint (hWnd , hdc);