BeginPaint

BeginPaint函式為指定視窗進行繪圖工作的準備,並用將和繪圖有關的信息填充到一個PAINTSTRUCT結構中。

基本介紹

  • 中文名:BeginPaint
  • 說明:視窗進行繪圖工作的準備
  • 函式原型:HDC BeginPaint
  • 參數:hwnd
函式原型,參數,返回值,備註,例子代碼,

函式原型

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

參數

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

返回值

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

備註

BeginPaint函式自動設定顯示設備內容的剪下區域,而排除任何更新區域外的區域。該更新區域可以通過InvalidateRectInvalidateRgn函式設定,也可以是系統在改變大小、移動、創建、滾動後設定的,
亦是其他的影響客戶區的操作來設定的。如果更新區域被標記為可擦除的,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);
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);
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);

相關詞條

熱門詞條

聯絡我們