遍匈 / Windows園殻 / 5、夕侘児粥 /

眉、Windows夕崧侃尖!鮫泣才?(円崇痕方)

和中厘?網胎議頁Arc痕方?万紙崙蓉垈爆?。隼遇?泌惚音枠網胎匯和Ellipse痕方?椎担Arc痕方繍佃參尖盾?遇泌惚音枠網胎Rectangle痕方?椎担Ellipse痕方嗽繍佃參尖盾?遇泌惚網胎Ellipse才Rectangle痕方?椎担厘嗽氏網胎RoundRect、Chord才Pie痕方。

諒籾壓噐?Rectangle、Ellipse、RoundRect、Chord才Pie痕方冢鯉栖傍音頁鮫?痕方。短危?宸乂痕方頁壓鮫??徽万断揖扮嗽野秘鮫泡野秘匯倖撃液曝囃。宸倖鮫泡坪協葎易弼?咀緩輝艇及匯肝聞喘宸乂痕方扮?艇辛嬬音氏廣吭欺万断音峪頁鮫?。冢鯉仇傍?宸乂痕方奉噐朔中仝野秘曝囃々議弌准?音狛?厘珊頁壓宸戦網胎万断。

貧中戻欺議痕方嗤匯倖慌揖蒙來?軸万断脅頁卆象匯倖裳侘円順崇栖紙夕議。艇協吶匯倖淫根乎斤嵆議崇?軸仝円順崇(bounding box)々?Windows祥壓宸倖崇坪鮫竃乎麗周。

宸乂痕方嶄恷酒汽議祥頁鮫匯倖裳侘?

Rectangle (hdc, xLeft, yTop, xRight, yBottom) ;
 

泣(xLeft, yTop)頁裳侘議恣貧叔?(xRight, yBottom)頁裳侘議嘔和叔。喘痕方Rectangle鮫竃議夕侘泌夕5-6侭幣?裳侘議円悳頁峠佩噐?塋焼澶痛僲什祐講臼漾?

參念亟狛夕侘殻會議殻會亟恬宀母呂夕殆陶餓議諒籾。嗤乂夕侘狼由鮫竃議夕侘淫根嘔恫炎才久恫炎?遇嗤乂夸峪鮫欺?遇音淫根?嘔恫炎才久恫炎。Windows寡喘朔匯嶽圭隈?音狛嗤匯嶽厚酒汽議圭隈栖房深宸倖諒籾。

深打和中議痕方柵出?

Rectangle (hdc, 1, 1, 5, 4) ;
 

貧中厘断戻欺?Windows壓円順崇坪鮫夕。辛參繍?塋焼焠誅鶻敏燦毿璉顳f籌丕c晋毿舎惷者斷燦毿璉餤ピŘ據1濬膺鮖kg斃璉馼錬h産黌擶濬膺鯆攣X慚裡o唾翹誼灞僕斜了19歆簡欝佃竎咤?

厘參念戻欺狛?Rectangle冢鯉仇傍音頁鮫?痕方?GDI匆野秘撃液曝囃。隼遇?咀葎坪協喘易弼野秘曝囃?咀緩GDI野秘曝囃旺音苧?圈?

艇岑祇阻泌採鮫裳侘?匆祥岑祇阻泌採鮫蓉垈?咀葎万断聞喘議歌方脅頁屢揖議?

Ellipse (hdc, xLeft, yTop, xRight, yBottom) ;
 

喘Ellipse痕方鮫竃議夕侘泌夕5-7侭幣?紗貧阻倡?更撹議円順崇?。

鮫垈叔裳侘議痕方聞喘嚥痕方Rectangle式Ellipse痕方屢揖議円順崇?珊淫根総翌曾倖歌方?

RoundRect (hdc, xLeft, yTop, xRight, yBottom,
 
 xCornerEllipse, yCornerEllipse) ;
 

喘宸倖痕方鮫竃議夕侘泌5-8侭幣。

Windows聞喘匯倖弌蓉垈栖鮫垈叔?宸倖蓉垈議錐葎xCornerEllipse?互葎yCornerEllipse。辛參?嵆宸倖弌蓉垈蛍葎阻膨倖何蛍?匯倖嵆尫匯倖?耽倖胡挫喘壓裳侘議匯倖叔貧。xCornerEllipse才yCornerEllipse議峙埆寄?叔祥埆苧?圈H膵?xCornerEllipse吉噐xLeft嚥xRight議餓?拝yCornerEllipse吉噐yTop嚥yBottom議餓?椎担RoundRect痕方繍鮫竃匯倖蓉垈。

壓紙崙夕5-8侭幣議垈叔裳侘扮?喘阻和中議巷塀栖柴麻叔貧蓉垈議樫雁。

xCornerEllipse = (xRight - xLeft) / 4 ;
 
yCornerEllipse = (yBottom- yTop) / 4 ;
 

宸頁匯嶽酒汽議圭隈?徽頁潤惚心軟栖嗤泣音斤匠?咀葎叔議淀爆何蛍壓裳侘海議匯円勣寄乂。勣獣屎宸匯諒籾?艇辛參斑xCornerEllipse嚥yCornerEllipse議峙屢吉。

Arc、Chord才Pie痕方脅峪勣屢揖議歌方?

Arc(hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd) ;
 
Chord (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd) ;
 
Pie(hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd) ;
 

喘Arc痕方鮫竃議?泌夕5-9侭幣?喘Chord才Pie痕方鮫竃議?蛍艶泌夕5-10才5-11侭幣。Windows喘匯訳邪?議?繍(xStart, yStart)嚥蓉垈議嶄伉銭俊?貫乎?嚥円順崇議住泣蝕兵?Windows梓郡扮寞圭??冽彭蓉垈鮫匯訳察。Windows珊喘総匯訳邪?議?繍(xEnd?yEnd)嚥蓉垈議嶄伉銭俊?壓乎?嚥円順崇議住泣侃?Windows唯峭鮫察。

斤噐Arc痕方?宸劔祥潤崩阻。咀葎察峪頁匯訳蓉垈侘議?遇厮?遇音頁匯倖野秘曝囃。斤噐Chord痕方?Windows銭俊察?議極泣。遇斤噐Pie痕方?Windows繍察議曾倖極泣嚥蓉垈議嶄伉屢銭俊。碗嚥蛭侘夕議坪何參朕念鮫泡野秘。

艇辛嬬音湊苧易壓Arc、Chord才Pie痕方嶄蝕兵才潤崩了崔議喘隈?葎焚担音酒汽仇壓蓉垈議巓壓?峺協蝕兵才潤崩泣椿?頁議?艇辛參宸担恂?徽頁艇繍音誼音麻竃宸乂泣。Windows議圭隈壓音勣箔宸嶽娼鳩來議訳周和?抜頼撹阻屢揖議垢恬。

殻會5-3 LINEDEMO鮫匯倖裳侘、匯倖蓉垈、匯倖垈叔裳侘才曾訳?粁?音狛音頁梓宸匯乏會。殻會燕苧阻協吶撃液曝囃議痕方糞縞貧斤宸乂曝囃序佩阻野秘?咀葎壓蓉垈朔中議?瓜孳廖阻?潤惚泌夕5-12嶄侭幣。

殻會5-3 LINEDEMO
 
LINEDEMO.C
 
/*---------------------------------------------------------
 
 LINEDEMO.C -- Line-Drawing Demonstration Program
 
 (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 ("LineDemo") ;
 
 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 ("Line Demonstration"),
 
 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 int cxClient, cyClient ;
 
 HDC hdc ;
 
 PAINTSTRUCT ps ;
 
 
 
 switch (message)
 
 {
 
 case WM_SIZE:
 
 cxClient = LOWORD (lParam) ;
 
 cyClient = HIWORD (lParam) ;
 
 return 0 ;
 
 
 
 case WM_PAINT:
 
 hdc = BeginPaint (hwnd, &ps) ;
 
 
 
 Rectangle (hdc, cxClient / 8, cyClient / 8,
 
 7 * cxClient / 8, 7 * cyClient / 8) ;
 
 
 
 MoveToEx (hdc, 0, 0, NULL) ;
 
 LineTo (hdc, cxClient, cyClient) ;
 
 
 
 MoveToEx (hdc, 0, cyClient, NULL) ;
 
 LineTo (hdc, cxClient, 0) ;
 
 
 
 Ellipse (hdc, cxClient / 8, cyClient / 8,
 
 7 * cxClient / 8, 7 * cyClient / 8) ;
 
 
 
 RoundRect (hdc, cxClient / 4, cyClient / 4,
 
 3 * cxClient / 4, 3 * cyClient / 4,
 
 cxClient / 4, cyClient / 4) ;
 
 
 
 EndPaint (hwnd, &ps) ;
 
 return 0 ;
 
 
 
 case WM_DESTROY:
 
 PostQuitMessage (0) ;
 
 return 0 ;
 
 }
 
 return DefWindowProc (hwnd, message, wParam, lParam) ;
 
}

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