膨、Windows夕侘侃尖!紙崙野秘曝囃(Polygon痕方才謹円侘野秘圭
厘厮将網胎狛阻念励倖曝囃野秘痕方?Polygon頁及鎗倖鮫揮円順崇議野秘夕侘議痕方?乎痕方議柵出嚥Polyline痕方屢貌?
Polygon (hdc, apt, iCount) ;
凪嶄?apt歌方頁POINT潤更議匯倖方怏?iCount頁泣議方朕。泌惚乎方怏嶄議恷朔匯倖泣嚥及匯倖泣音揖?夸Windows繍氏壅紗匯訳??繍恷朔匯倖泣嚥及匯倖泣銭軟栖?壓Polyline痕方嶄?Windows音氏宸担恂?。PolyPolygon痕方泌和侭幣?
PolyPolygon (hdc, apt, aiCounts, iPolyCount) ;
乎痕方紙崙謹倖謹円侘。恷朔匯倖歌方公竃阻侭鮫議謹円侘議倖方。斤噐耽倖謹円侘?aiCounts方怏公竃阻謹円侘議極泣方。apt方怏醤嗤畠何謹円侘議侭嗤泣。茅勧指峙參翌?PolyPolygon壓孔嬬貧嚥和中議旗鷹屢揖?
for (i = 0, iAccum = 0 ; i < iPolyCount ; i++)
{
Polygon (hdc, apt + iAccum, aiCounts[i]) ;
iAccum += aiCounts[i] ;
}
斤噐Polygon才PolyPolygon痕方?Windows聞喘協吶壓譜姥坪否嶄議朕念鮫泡栖野秘宸倖揮円順議曝囃。崛噐野秘坪何議圭塀?夸函畳噐謹円侘野秘圭塀?艇辛參喘SetPolyFillMode痕方栖譜協?
SetPolyFillMode (hdc, iMode) ;
坪協秤趨和?謹円侘野秘圭塀頁ALTERNATE?徽頁艇辛參繍万譜協葎WINDING。曾嶽圭塀議曝艶歌需夕5-15侭幣。
遍枠?ALTERNATE才WINDING圭塀岻寂議曝艶載否叟賀状。斤噐ALTERNATE圭塀?艇辛參譜?貫匯倖涙博寄議撃液曝囃坪何議泣鮫??峪嗤邪?議?刊狛阻謎方訳円順?扮?嘉野秘撃液曝囃。宸祥頁野秘阻佛議叔遇嶄伉短瓜野秘議圻咀。
励叔佛議箭徨聞誼WINDING圭塀心軟栖曳糞縞貧厚酒汽匯乂。壓紙崙汽倖議謹円侘扮?寄謹方秤趨和?WINDING圭塀氏野秘侭嗤撃液議曝囃。徽頁匆嗤箭翌。
壓WINDING圭塀和勣鳩協匯倖撃液曝囃頁倦瓜野秘?艇挽症辛參譜?貫椎倖涙博寄議曝囃鮫?。泌惚邪?議?刊狛阻謎方訳円順??曝囃祥瓜野秘?宸才ALTERNATE圭塀匯劔。泌惚邪?議?刊狛阻甜方訳円順??夸曝囃辛嬬瓜野秘匆辛嬬音瓜野秘。泌惚匯倖圭??屢斤噐邪???議円順?方嚥総匯倖圭?議円順?方音屢吉?祥野秘曝囃。
箭泌?深打夕5-16嶄議麗悶。壓?議収遊峺竃阻鮫?議圭?。曾嶽圭塀脅氏野秘眉倖撃液議L侘曝囃?催鷹貫1欺3。催鷹葎4才5議曾倖弌坪何曝囃?壓ALTERNATE圭塀和音氏瓜野秘。徽頁?壓WINDING圭塀和?催鷹葎5議曝囃氏瓜野秘?咀葎貫曝囃坪駅倬刊狛曾訳屢揖圭?議?嘉嬬欺器夕侘翌何。催鷹葎4議曝囃音氏瓜野秘?咀葎駅倬刊狛曾訳圭?屢郡議?。
泌惚艇山夘Windows短嗤宸担艦苧?椎担殻會5-5 ALTWIND氏婢幣公艇心。
殻會5-5 ALTWIND
ALTWIND.C
/*-------------------------------------------------------------------
ALTWIND.C -- Alternate and Winding Fill Modes
(c) Charles Petzold, 1998
-------------------------------------------------------------------*/
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("AltWind") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc= WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName= NULL ;
wndclass.lpszClassName= szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("Program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("Alternate and Winding Fill Modes"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static POINT aptFigure [10] = {10,70, 50,70, 50,10, 90,10, 90,50,
30,50, 30,90, 70,90, 70,30, 10,30 };
static int cxClient, cyClient ;
HDC hdc ;
int i ;
PAINTSTRUCT ps ;
POINT apt[10] ;
switch (message)
{
case WM_SIZE:
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
return 0 ;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
SelectObject (hdc, GetStockObject (GRAY_BRUSH)) ;
for (i = 0 ; i < 10 ; i++)
{
apt[i].x = cxClient * aptFigure[i].x / 200 ;
apt[i].y = cyClient * aptFigure[i].y / 100 ;
}
SetPolyFillMode (hdc, ALTERNATE) ;
Polygon (hdc, apt, 10) ;
for (i = 0 ; i < 10 ; i++)
{
apt[i].x += cxClient / 2 ;
}
SetPolyFillMode (hdc, WINDING) ;
Polygon (hdc, apt, 10) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
夕侘議恫炎?皿蛍葎100×100倖汽了?刈贋壓aptFigure方怏嶄。宸乂恫炎頁卆象?塋焦瘕魑朕躑蛤邑澡隼侗峙帖3茂鯱塋祥斜料輯裡r惨諒荒?ALTERNATE野秘圭塀?総匯肝聞喘WINDING圭塀。潤惚需夕5-17。