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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
まじこ

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

#1

投稿記事 by まじこ » 12年前

開発環境は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);
}

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 12年前

コードを提示する際は、BBcodeを有効にした状態でcodeタグで囲み、
かつきちんとインデントをしていただけると、見やすくてありがたいです。

RegisterClassExに渡しているウィンドウクラスの名前と、CreateWindowに渡しているウィンドウクラスの名前が違うので、
Windowsが「そんなウィンドウクラスは知らない」と言ってエラーになっているのだと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る