ページ 11

ウインドウハンドルが取得できない

Posted: 2013年12月18日(水) 06:18
by まじこ
開発環境はMicrosoft Visual Studio 2010 Expressで
ウインドウを表示したいだけなのですがCreateWindow()にてhWndに0が返ってきてしまいます。
2冊の参考書を参考にして作っているのですがどうしてもうまく行きません。
どなたかご教授願います。

#include <Windows.h>

#define W_W 300
#define W_H 300
char szClassName[] = "sampleOl";
LRESULT CALLBACK WndProc(HWND hWnd,UINT UMsg,WPARAM Wparam,LPARAM Lparam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPlnstance,PSTR szCmdLine, int iCmdShow)

{
HWND hWnd;

MSG Msg;

WNDCLASSEX Wndclass;

Wndclass.cbSize = sizeof(WNDCLASSEX);
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.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
Wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
Wndclass.lpszMenuName = NULL;
Wndclass.lpszClassName = "test";

RegisterClassEx(&Wndclass);

hWnd = CreateWindow(
szClassName,
"b",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

if(!hWnd){return FALSE;}

ShowWindow(hWnd,iCmdShow);
UpdateWindow(hWnd);

while(Msg.message != WM_QUIT){
if(PeekMessage(&Msg,NULL,0U,0U,PM_REMOVE)){
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}

UnregisterClass("test",hInstance);

return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT UMsg, WPARAM WParam, LPARAM lParam)
{
switch(UMsg){
case WM_DESTROY:
PostQuitMessage(0) ;
return 0;
}
return DefWindowProc (hWnd, UMsg, WParam, lParam);
}

Re: ウインドウハンドルが取得できない

Posted: 2013年12月18日(水) 08:00
by みけCAT
コードを提示する際は、BBcodeを有効にした状態でcodeタグで囲み、
かつきちんとインデントをしていただけると、見やすくてありがたいです。

RegisterClassExに渡しているウィンドウクラスの名前と、CreateWindowに渡しているウィンドウクラスの名前が違うので、
Windowsが「そんなウィンドウクラスは知らない」と言ってエラーになっているのだと思います。