說明
BeginPaint函式為指定視窗進行繪圖工作的準備,並用將和繪圖有關的信息填充到一個paintstruct結構中。
函式原型
HDC BeginPaint(HWND hwnd, // 視窗的句柄
LPPAINTSTRUCT lpPaint // 繪製信息
);
參數
hwnd:[輸入]被重繪的視窗句柄lpPaint:[輸出]指向一個用來接收繪畫信息的PAINTSTRUCT結構
返回值
如果函式成功,返回值是指定視窗的“顯示設備描述表”句柄。如果函式失敗,返回值是NULL,表明沒有得到顯示設備的內容。
Windows NT/2000/XP: 使用GetLastError得到更多的錯誤信息。
備註
BeginPaint函式自動設定顯示設備內容的剪下區域,而排除任何更新區域外的區域。該更新區域可以通過InvalidateRect或InvalidateRgn函式設定,也可以是系統在改變大小、移動、創建、滾動後設定的,亦是其他的影響客戶區的操作來設定的。如果更新區域被標記為可擦除的,BeginPaint傳送一個WM_ERASEBKGND訊息給視窗。
一個應用程式除了回響WM_PAINT訊息外,不應該調用BeginPaint。每次調用BeginPaint都應該有相應的EndPaint函式。
如果被繪畫的客戶區中有一個caret(caret:插入符。是視窗客戶區中的一個閃爍的線,塊,或點陣圖。插入符通常表示文本或圖形將被插入的地方。即一閃一閃的游標),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);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
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;
HEPN 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 , hOldPen);
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);