遍匈 / windows園殻 /

Windows GDI紙夕児粥嚥煤楚序竣

<貧匯准 和匯准>
GDI 頁 Graphics Device Interface 議抹亟?各葎夕侘譜姥俊笥?麼勣喘栖紙夕?喇強蓑全俊垂 GDI32.DLL 戻工屶隔。

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;
}
塰佩丼惚?

<貧匯准 和匯准>

AltStyle によって変換されたページ (->オリジナル) /