-
BeginPaint
鎖定
BeginPaint函數為指定窗口進行繪圖工作的準備,並用將和繪圖有關的信息填充到一個PAINTSTRUCT結構中。
- 中文名
- BeginPaint
- 説 明
- 窗口進行繪圖工作的準備
- 函數原型
- HDC BeginPaint
- 參 數
- hwnd
BeginPaint函數原型
HDC BeginPaint( HWND hwnd, // 窗口的句柄 LPPAINTSTRUCT lpPaint // 繪製信息 );
BeginPaint參數
lpPaint:[輸出]指向一個用來接收繪畫信息的PAINTSTRUCT結構
BeginPaint返回值
如果函數成功,返回值是指定窗口的“顯示設備描述表”句柄。
如果函數失敗,返回值是NULL,表明沒有得到顯示設備的內容。
Windows NT/2000/XP: 使用GetLastError得到更多的錯誤信息。
BeginPaint其他信息
BeginPaint函數自動設置顯示設備內容的剪切區域,而排除任何更新區域外的區域。該更新區域可以通過InvalidateRect或InvalidateRgn函數設置,也可以是系統在改變大小、移動、創建、滾動後設置的,
亦是其他的影響客户區的操作來設置的。如果更新區域被標記為可擦除的,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);
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:17次歷史版本
- 最近更新: JD萤火虫003