Windows GDI紙夕児粥嚥煤楚序竣
<貧匯准
和匯准>
GDI 頁 Graphics Device Interface 議抹亟?各葎夕侘譜姥俊笥?麼勣喘栖紙夕?喇強蓑全俊垂 GDI32.DLL 戻工屶隔。
GDI 祥頁匯倖痕方垂?戻工阻載謹紙夕痕方?匆祥頁GDI32.DLL 嶄議擬竃痕方??貧准聞喘議 TextOut 祥頁凪嶄岻匯。GDI 掲械嶷勣?音徽哘喘殻會聞喘万栖紙夕?Windows 云附匆聞喘GDI栖?塋肖短Ы臙罍?犯膕傍ァより檞?擄⇒識蟶擁鷄袂胡覽函?
廣吭?恫炎議圻泣脅頁人薩曝議恣貧叔。
幣箭旗鷹?
幣箭旗鷹?
鳩協軟泣聞喘 MoveToEx 痕方。MoveToEx 喘栖峺協鮫永議軟兵了崔?匆祥頁貫陳戦蝕兵鮫?万議圻侏葎?
鮫永喘栖鮫??辛參頁撃液議匆辛參頁蝕慧議?曳泌岷?、爆?、垈侘、裳侘吉。
鮫泡喘栖野割嘘尚賜宀匯翠曝囃?匯違揮冲弼賜夕宛。
曳泌鮫匯倖裳侘?俶勣枠孀匯翠鮫下?隼朔喘鮫永鮫竃裳侘議態勢??訳??壅喘鮫泡公裳侘曝囃島与貧冲弼。
鮫永嚥鮫泡議曝艶?鮫永匯違喘栖鮫?訳?鮫態勢?鮫泡匯違喘栖序佩寄中持紙崙?曳泌公嘘尚彭弼?野割鮫永鮫竃議匯翠撃液議曝囃吉。
幹秀鮫永議API痕方葎 CreatePen?
鮫永錐業 nWidth 峺貸辞錐業。iWidth葎 0 夸吭龍彭鮫永錐業葎匯倖崧殆。泌惚鮫永劔塀葎泣?賜宀倡??揖扮嗽峺協匯倖寄噐 1 議鮫永錐業?椎担Windows繍聞喘糞?鮫永栖旗紋。
鮫永議冲弼 crColor 辛參岷俊聞喘 RGB 冲弼。RGB 頁匯嶽炎彈冲弼?宥狛碕(R)、駄(G)、清(B)眉圻弼議京紗誼欺光嶽音揖議冲弼。
聾伉議響宀辛嬬厮将窟孖?CreatePen 痕方壓幹秀鮫永扮旺短嗤峺協譜姥桟廠?匆祥頁傍?仟幹秀議鮫永嚥輝念譜姥桟廠旺短嗤購選?涙隈聞喘。
鮫永、鮫泡、忖悶吉瓜各葎GDI斤嵆。低辛參繍GDI斤嵆尖盾葎垢醤?辛參工 GDI 痕方聞喘。仟幹秀議 GDI 斤嵆駅倬宥狛 SelectObject 痕方僉秘譜姥桟廠嘉嬬聞喘。
SelectObject 痕方繍GDI斤嵆嚥譜姥桟廠購選軟栖?万議圻侏葎?
曾泣廣吭?
A) 鮫永恷挫壓 WM_CREATE 並周嶄幹秀?咀葎輝哘喘殻會塰佩扮氏撞訓仇乾窟 WM_PAINT 並周?曳泌完笥瓜顕固朔壅?塋勝?或擶四篭咩?或擶酸ワット豕硲c心龍斜菻ű慚卒棺┿17複xii坊况編苅r加屍弍慴Ą?
B) 侭嗤幹秀議GDI斤嵆?壓完笥瓜購液扮?氏乾窟 WM_DESTROY 並周?脅勣評茅渠?參瞥慧坪贋。
CreateSolidBrush 痕方辛參喘栖幹秀匯倖峺協冲弼議糞伉鮫泡?圻侏葎?
鮫泡聞喘訟箭?
GDI 祥頁匯倖痕方垂?戻工阻載謹紙夕痕方?匆祥頁GDI32.DLL 嶄議擬竃痕方??貧准聞喘議 TextOut 祥頁凪嶄岻匯。GDI 掲械嶷勣?音徽哘喘殻會聞喘万栖紙夕?Windows 云附匆聞喘GDI栖?塋肖短Ы臙罍?犯膕傍ァより檞?擄⇒識蟶擁鷄袂胡覽函?
GDI 児粥
宸匯何蛍讐盾泌採紙崙酒汽議夕侘?遇壓煤楚序竣何蛍讐盾泌採胆晒夕侘。1) 紙崙裳侘
Rectangle 痕方辛參壓完笥貧紙崙匯倖裳侘?万議圻侏葎?BOOL Rectangle( HDC hdc, //譜姥桟廠鞘凹 int nLeftRect, //裳侘恣貧叔x恫炎 int nTopRect, //裳侘恣貧叔y恫炎 int nRightRect, //裳侘嘔和叔x恫炎 int nBottomRect //裳侘嘔和叔y恫炎 );幣箭旗鷹?
case WM_PAINT: hdc = BeginPaint(hwnd, &ps); Rectangle(hdc, 50, 50, 150, 150); EndPaint(hwnd, &ps); return 0 ;塰佩丼惚?
廣吭?恫炎議圻泣脅頁人薩曝議恣貧叔。
2) 揮垈叔議裳侘
泌惚艇状誼貧中裳侘狛噐圭屎?椎担辛參聞喘 RoundRect 痕方?万辛參鮫竃揮嗤垈叔円崇議裳侘?圻侏葎?BOOL RoundRect( HDC hdc, //譜姥桟廠鞘凹 int nLeftRect, //裳侘恣貧叔x恫炎 int nTopRect, //裳侘恣貧叔y恫炎 int nRightRect, //裳侘嘔和叔x恫炎 int nBottomRect, //裳侘嘔和叔y恫炎 int nWidth, //喘栖鮫垈叔議蓉垈議錐業 int nHeight //喘栖鮫垈叔議蓉垈議互業 );廣吭?輝 nHeight >= nBottomRect 拝 nWidth = nRightRect 扮?椎担紙崙竃議祥頁匯倖垈。
幣箭旗鷹?
case WM_PAINT: hdc = BeginPaint(hwnd, &ps); RoundRect(hdc, 20, 20, 150, 150, 25, 25); EndPaint(hwnd, &ps); return 0 ;塰佩丼惚?
3) 紙崙蓉垈
Ellipse() 痕方辛參喘栖紙崙蓉垈?万議圻侏葎?BOOL Ellipse( HDC hdc, //譜姥桟廠鞘凹 int nLeftRect, //恣貧叔x恫炎 int nTopRect, //恣貧叔y恫炎 int nRightRect, //嘔和叔x恫炎 int nBottomRect //嘔和叔y恫炎 );廣吭?輝 nRightRect - nLeftRect = nBottomRect - nRightRect 扮紙崙竃議頁匯倖垈。
幣箭旗鷹?
case WM_PAINT: hdc = BeginPaint(hwnd, &ps); Ellipse(hdc, 20, 20, 180,90); EndPaint(hwnd, &ps); return 0 ;塰佩丼惚?
4) 紙崙岷?
紙崙岷?俶勣鳩協軟泣才嶮泣。鳩協軟泣聞喘 MoveToEx 痕方。MoveToEx 喘栖峺協鮫永議軟兵了崔?匆祥頁貫陳戦蝕兵鮫?万議圻侏葎?
BOOL MoveToEx( HDC hdc, //譜姥桟廠鞘凹 int x, //軟兵了崔x恫炎 int y, //軟兵了崔y恫炎 LPPOINT lpPoint //峺?喘噐隠贋輝念了崔議POINT潤更悶議峺寞 );斤噐歌方 lpPoint?厘断旺音俶勣隠贋輝念了崔?侭參岷俊峺協葎 NULL 軸辛。
廣吭?win32音壅屶隔 MoveTo?峪屶隔万議制婢痕方 MoveToEx。嗤阻軟泣?俊和栖祥辛參聞喘 LineTo 痕方鮫岷?阻。LineTo 痕方喘噐貫輝念紙夕了崔?峺協泣紙崙匯訳岷??万議圻侏葎?
BOOL LineTo( HDC hdc, //譜姥桟廠鞘凹 int xEnd, //嶮泣議x恫炎 int yEnd //嶮泣議y恫炎 );幣箭旗鷹?
case WM_PAINT: hdc = BeginPaint(hwnd, &ps); MoveToEx(hdc, 150, 150, NULL); //譜協軟兵泣,音隠贋輝念泣恫炎 LineTo(hdc,200, 60); //及匯訳? LineTo(hdc, 250, 150); //及屈訳? LineTo(hdc, 150, 150); //及眉訳? EndPaint(hwnd, &ps); return 0 ;塰佩丼惚?
GDI 紙夕煤楚序竣--鮫永才鮫泡
鮫永才鮫泡脅喘栖壓鮫下貧紙夕。鮫下祥頁喘栖紙鮫議匯翠嘘尚?辛參嗤冲弼匆辛參短嗤?匆辛參嗤夕宛?曳泌訳瞭、利鯉吉??鮫下辛參尖盾葎厘断峠扮恬夕扮聞喘議崕。鮫永喘栖鮫??辛參頁撃液議匆辛參頁蝕慧議?曳泌岷?、爆?、垈侘、裳侘吉。
鮫泡喘栖野割嘘尚賜宀匯翠曝囃?匯違揮冲弼賜夕宛。
曳泌鮫匯倖裳侘?俶勣枠孀匯翠鮫下?隼朔喘鮫永鮫竃裳侘議態勢??訳??壅喘鮫泡公裳侘曝囃島与貧冲弼。
鮫永嚥鮫泡議曝艶?鮫永匯違喘栖鮫?訳?鮫態勢?鮫泡匯違喘栖序佩寄中持紙崙?曳泌公嘘尚彭弼?野割鮫永鮫竃議匯翠撃液議曝囃吉。
1) 幹秀才聞喘鮫永
貧中議紙夕聞喘議頁Windows議潮範鮫永?匆祥頁錐業葎1倖崧殆?冲弼葎菜弼議鮫永。厘断匆辛參幹秀徭失議鮫永。幹秀鮫永議API痕方葎 CreatePen?
HPEN CreatePen( int nPenStyle, //鮫永議劔塀 int nWidth, //鮫永議錐業 COLORREF crColor //鮫永議冲弼 );鮫永劔塀 nPenStyle 嗤7嶽函峙?
| 崎協吶 | 崎協吶斤哘議峙 | 傍苧 |
|---|---|---|
| PS_SOLID | 0 | 糞? |
| PS_DASH | 1 | 倡??粁???勣箔鮫永錐業 <= 1 |
| PS_DOT | 2 | 泣??勣箔鮫永錐業 <= 1 |
| PS_DASHDOT | 3 | ?、泣?勣箔鮫永錐業 <= 1 |
| PS_DASHDOTDOT | 4 | ?、泣、泣?勣箔鮫永錐業 <= 1 |
| PS_NULL | 5 | 音辛需 |
| PS_INSIDEFRAME | 6 | 糞??徽鮫永錐業頁?戦制婢議 |
鮫永錐業 nWidth 峺貸辞錐業。iWidth葎 0 夸吭龍彭鮫永錐業葎匯倖崧殆。泌惚鮫永劔塀葎泣?賜宀倡??揖扮嗽峺協匯倖寄噐 1 議鮫永錐業?椎担Windows繍聞喘糞?鮫永栖旗紋。
鮫永議冲弼 crColor 辛參岷俊聞喘 RGB 冲弼。RGB 頁匯嶽炎彈冲弼?宥狛碕(R)、駄(G)、清(B)眉圻弼議京紗誼欺光嶽音揖議冲弼。
聾伉議響宀辛嬬厮将窟孖?CreatePen 痕方壓幹秀鮫永扮旺短嗤峺協譜姥桟廠?匆祥頁傍?仟幹秀議鮫永嚥輝念譜姥桟廠旺短嗤購選?涙隈聞喘。
鮫永、鮫泡、忖悶吉瓜各葎GDI斤嵆。低辛參繍GDI斤嵆尖盾葎垢醤?辛參工 GDI 痕方聞喘。仟幹秀議 GDI 斤嵆駅倬宥狛 SelectObject 痕方僉秘譜姥桟廠嘉嬬聞喘。
SelectObject 痕方繍GDI斤嵆嚥譜姥桟廠購選軟栖?万議圻侏葎?
HGDIOBJ SelectObject( HDC hdc, //譜姥桟廠鞘凹 HGDIOBJ ho //GDI斤嵆鞘凹 );和中議旗鷹氏幹秀匯倖碕弼議鮫永?旺鮫竃匯倖眉叔侘?
//完笥狛殻
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
PAINTSTRUCT ps;
HDC hdc;
//協吶匯倖鮫永鞘凹,萩協吶葎床蓑延楚
static HPEN hPen;
switch (message){
case WM_CREATE:
//幹秀錐業葎2倖崧殆議碕弼泣?鮫永?隠贋鞘凹欺 hPen 延楚
hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
//僉秘鮫永欺譜姥桟廠
SelectObject(hdc, hPen);
//紙崙眉叔侘
MoveToEx(hdc, 150, 150, NULL);
LineTo(hdc,200, 60); //及匯訳?
LineTo(hdc, 250, 150); //及屈訳?
LineTo(hdc, 150, 150); //及眉訳?
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
//萩恂挫鋲朔垢恬,侃尖 WM_DESTROY 嶧連扮評茅岻念厘断幹秀議匯俳GDI斤嵆
DeleteObject(hPen);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
塰佩丼惚?曾泣廣吭?
A) 鮫永恷挫壓 WM_CREATE 並周嶄幹秀?咀葎輝哘喘殻會塰佩扮氏撞訓仇乾窟 WM_PAINT 並周?曳泌完笥瓜顕固朔壅?塋勝?或擶四篭咩?或擶酸ワット豕硲c心龍斜菻ű慚卒棺┿17複xii坊况編苅r加屍弍慴Ą?
B) 侭嗤幹秀議GDI斤嵆?壓完笥瓜購液扮?氏乾窟 WM_DESTROY 並周?脅勣評茅渠?參瞥慧坪贋。
2) 幹秀才聞喘鮫泡
Windows API 嶄嗤曾倖痕方辛參喘栖幹秀鮫泡。CreateSolidBrush 痕方辛參喘栖幹秀匯倖峺協冲弼議糞伉鮫泡?圻侏葎?
HBRUSH CreateSolidBrush( COLORREF crColor ); // crColor葎鮫泡冲弼CreateHatchBrush 痕方辛參喘栖幹秀匯倖峺協冲弼議根嗤蒙協咐唹劔塀議鮫泡?圻侏葎?
HBRUSH CreateHatchBrush( int fnStyle, //鮫泡劔塀 COLORREF crColor //鮫泡冲弼 );fnStyle 辛參嗤6嶽函峙?
- HS_BDIGONAL?45業?貧?徭恣崛嘔議咐唹(///)
- HS_CROSS?燕幣邦峠岷?才換岷岷?住我咐唹(+++)
- HS_DIAGCROSS?45業住我咐唹(XXX)
- HS_FDIAGONAL?45業?和徭恣崛嘔議咐唹(\\\)
- HS_HORIZONTAL?邦峠咐唹(---)
- HS_VERTICAL?換岷咐唹
鮫泡聞喘訟箭?
//完笥狛殻
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
PAINTSTRUCT ps;
HDC hdc;
//協吶曾倖鮫泡,萩協吶葎床蓑延楚
static HBRUSH hSolidBrush;
static HBRUSH hHatchBrush;
switch (message){
case WM_CREATE:
//幹秀清弼糞伉鮫泡?隠贋鞘凹欺 hSolidBrush 延楚
hSolidBrush = CreateSolidBrush(RGB(0, 0, 255));
//幹秀駄弼住我咐唹鮫泡?隠贋鞘凹欺 hHatchBrush 延楚
hHatchBrush = CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0));
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
//僉秘清弼糞伉鮫泡欺譜姥桟廠
SelectObject(hdc, hSolidBrush);
Rectangle(hdc, 0, 0, 200, 100); //紙崙裳侘
//僉秘駄弼住我鮫泡欺譜姥桟廠
SelectObject(hdc, hHatchBrush);
Ellipse(hdc,0,100,200,200); //紙崙蓉垈
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
//萩恂挫鋲朔垢恬,侃尖 WM_DESTROY 嶧連扮評茅岻念厘断幹秀議匯俳GDI斤嵆。
DeleteObject(hSolidBrush);
DeleteObject(hHatchBrush);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
塰佩丼惚?
<貧匯准
和匯准>