C++/win api

[Win api] CreateWindow

Rainbow๐ŸŒˆCoder 2021. 5. 30. 19:21
728x90

๋ณธ๋ฌธ์—์„œ๋Š” ์•„๋ž˜ ํ•˜์ด๋ผ์ดํŠธ ๋ถ€๋ถ„์„ ์„ธ๋ถ€์ ์œผ๋กœ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋‹ค.


BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{
   hInst = hInstance; 
   HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
  
   if (!hWnd) //์œˆ๋„์šฐ์ฐฝ์„ ์ƒ์„ฑ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฌธ์ด๋‹ค.
   {
      return FALSE;
   }


CreateWindow๋ฅผ ํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ์œˆ๋„์šฐ ํ•ธ๋“ค์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.
์‹ค์ œ ์œˆ๋„์šฐ์ฐฝ์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. ์ƒ์„ฑํ•œ ์œˆ๋„์šฐ์˜ ํ•ธ๋“ค์„ ๋ฐ˜ํ™˜ํ•ด์คŒ
   

์‹ค์ œ ์ฝ”๋“œ ; HWND hWnd = CreateWindowW(szWindowClass, szTitleWS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptrnullptr, hInstance, nullptr);

 

๊ฐ ์ธ์ˆ˜์˜ ์˜๋ฏธ: HWND CreateWindow(lpszClassName, lpszWindowName, dwStylex, y, nWidth, nHeight, hwndParenthmenuhinst, lpvParam)


1 lpszClassName
์ƒ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ์œˆ๋„์šฐ์˜ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด์ด๋‹ค. ์•ž์—์„œ ์ •์˜ํ•œ WndClass๊ตฌ์กฐ์ฒด์˜ lpszClassName ๋ฉค๋ฒ„์˜ ์ด๋ฆ„์„ ์—ฌ๊ธฐ์— ๊ธฐ์ž…ํ•ด ์ค€๋‹ค. 

2 lpszWindowName
์œˆ๋„์šฐ์˜ ํƒ€์ดํ‹€ ๋ฐ”์— ๋‚˜ํƒ€๋‚  ๋ฌธ์ž์—ด์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ง€์ •ํ•œ ๋ฌธ์ž์—ด์ด ์œˆ๋„์šฐ์˜ ํƒ€์ดํ‹€ ๋ฐ”์— ๋‚˜ํƒ€๋‚œ๋‹ค. 

3 dwStyle
๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์œˆ๋„์šฐ์˜ ํ˜•ํƒœ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ธ์ˆ˜์ด๋‹ค. ์ผ์ข…์˜ ๋น„ํŠธ ํ•„๋“œ๊ฐ’์ด๋ฉฐ ๊ฑฐ์˜ ์ˆ˜์‹ญ๊ฐœ๋ฅผ ํ—ค์•„๋ฆฌ๋Š” ๋งคํฌ๋กœ ์ƒ์ˆ˜๋“ค์ด ์ •์˜๋˜์–ด ์žˆ๊ณ  ์ด ์ƒ์ˆ˜๋“ค์„ OR์—ฐ์‚ฐ์ž๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์œˆ๋„์šฐ์˜ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋ฅผ ์ง€์ •ํ•œ๋‹ค. 

์œˆ๋„์šฐ๊ฐ€ ๊ฒฝ๊ณ„์„ ์„ ๊ฐ€์งˆ ๊ฒƒ์ธ๊ฐ€, ํƒ€์ดํ‹€ ๋ฐ”๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ธ๊ฐ€ ๋˜๋Š” ์Šคํฌ๋กค ๋ฐ”์˜ ์œ ๋ฌด ๋“ฑ๋“ฑ์„ ์„ธ์„ธํ•˜๊ฒŒ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ์Šคํƒ€์ผ๊ฐ’์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ์กฐํ•˜๋˜ WS_OVERLAPPEDWINDOW๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€์žฅ ๋ฌด๋‚œํ•œ ์œˆ๋„์šฐ ์„ค์ • ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ฆ‰ ์‹œ์Šคํ…œ ๋ฉ”๋‰ด, ์ตœ๋Œ€ ์ตœ์†Œ ๋ฒ„ํŠผ, ํƒ€์ดํ‹€ ๋ฐ”, ๊ฒฝ๊ณ„์„ ์„ ๊ฐ€์ง„ ์œˆ๋„์šฐ๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

4 X, Y, nWidth, nHeight
์ธ์ˆ˜์˜ ์ด๋ฆ„์ด ์˜๋ฏธํ•˜๋“ฏ์ด ์œˆ๋„์šฐ์˜ ์œ„์น˜์™€ ๊ฐ€๋กœ ๋ฐ ์„ธ๋กœ๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ํ”ฝ์…€ ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. x, y์ขŒํ‘œ๋Š” ๋ฉ”์ธ ์œˆ๋„์šฐ์˜ ๊ฒฝ์šฐ๋Š” ์ „์ฒด ํ™”๋ฉด์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉฐ ์ฐจ์ผ๋“œ ์œˆ๋„์šฐ๋Š” ๋ถ€๋ชจ ์œˆ๋„์šฐ์˜ ์ขŒ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค. ์ •์ˆ˜๊ฐ’์„ ๋ฐ”๋กœ ์ง€์ •ํ•ด๋„ ๋˜๋ฉฐ CW_USEDEFAULT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œˆ๋„์šฐ์ฆˆ๊ฐ€ ์•Œ์•„์„œ ์ ๋‹นํ•œ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ์„ค์ •ํ•ด ์ค€๋‹ค. 

5 hWndParent 
๋ถ€๋ชจ ์œˆ๋„์šฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋ถ€๋ชจ ์œˆ๋„์šฐ์˜ ํ•ธ๋“ค์„ ์ง€์ •ํ•ด ์ค€๋‹ค. ํŒ์—… ์œˆ๋„์šฐ๋Š” ์œˆ๋„์šฐ๋ผ๋ฆฌ ์ˆ˜์ง์ ์ธ ์ƒํ•˜๊ด€๊ณ„๋ฅผ ๊ฐ€์ ธ ๋ถ€์ž(parent-child) ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝ๋˜๋Š”๋ฐ ์ด ๊ด€๊ณ„๋ฅผ ์ง€์ •ํ•ด ์ฃผ๋Š” ์ธ์ˆ˜์ด๋‹ค.

๋ถ€๋ชจ ์œˆ๋„์šฐ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ๋Š” ์ด ๊ฐ’์„ NULL๋กœ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

6 hmenu
์œˆ๋„์šฐ์—์„œ ์‚ฌ์šฉํ•  ๋ฉ”๋‰ด์˜ ํ•ธ๋“ค์„ ์ง€์ •ํ•œ๋‹ค. WndClass์—๋„ ๋ฉ”๋‰ด๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฉค๋ฒ„๊ฐ€ ์žˆ๋Š”๋ฐ ์œˆ๋„์šฐ ํด๋ž˜์Šค์˜ ๋ฉ”๋‰ด๋Š” ๊ทธ ์œˆ๋„์šฐ ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ชจ๋“  ์œˆ๋„์šฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ˜๋ฉด ์ด ์ธ์ˆ˜๋กœ ์ง€์ •๋œ ๋ฉ”๋‰ด๋Š” ํ˜„์žฌ CreateWindow ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ์œˆ๋„์šฐ์—์„œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค. ๋งŒ์•ฝ WndClass์—์„œ ์ง€์ •ํ•œ ๋ฉ”๋‰ด๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด ์ธ์ˆ˜๋ฅผ NULL๋กœ ์ง€์ •ํ•˜๋ฉด ๋˜๋ฉฐ WndClass์—์„œ ์ง€์ •ํ•œ ๋ฉ”๋‰ด ๋Œ€์‹  ๋‹ค๋ฅธ ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด ์ธ์ˆ˜์— ์›ํ•˜๋Š” ๋ฉ”๋‰ด ํ•ธ๋“ค์„ ์ฃผ๋ฉด ๋œ๋‹ค. 

7 hinst

์œˆ๋„์šฐ ์ฐฝ์ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ ์†Œ์†์˜ ์œˆ๋„์šฐ ์ฐฝ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ์ธ์Šคํ„ด์Šค ๋ฒˆํ˜ธ(์šด์šฉ์ฒด์ œ๊ฐ€ ๋งŒ๋“  ์‹๋ณ„๋ฒˆํ˜ธ)

์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์˜ ํ•ธ๋“ค. WinMain์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ hInstance๋ฅผ ๋Œ€์ž…ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

8 lpvParam
CREATESTRUCT๋ผ๋Š” ๊ตฌ์กฐ์ฒด์˜ ๋ฒˆ์ง€์ด๋ฉฐ ํŠน์ˆ˜ํ•œ ๋ชฉ์ ์— ์‚ฌ์šฉ๋œ๋‹ค. ๋ณดํ†ต์€ NULL๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

์ฐธ๊ณ ๋ฌธํ—Œ:

Win32 API ์ž…๋ฌธ ๊ฐ•์ขŒ (soen.kr)

 

Win32 API ์ž…๋ฌธ ๊ฐ•์ขŒ

WinMain ํ•จ์ˆ˜์—์„œ ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ผ์€ ์œˆ๋„์šฐ๋ฅผ ๋งŒ๋“œ๋Š” ์ผ์ด๋‹ค. ์œˆ๋„์šฐ๊ฐ€ ์žˆ์–ด์•ผ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ์ถœ๋ ฅ์„ ๋ณด์—ฌ์ค„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์œˆ๋„์šฐ๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด ์œˆ๋„์šฐ ํด๋ž˜์Šค๋ฅผ ๋จผ

www.soen.kr

 

728x90