Win32初歩プログラミング

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Win32初歩プログラミング

#1

投稿記事 by rozeo » 11年前

皆さん明けましておめでとうございます。

新年早々早速質問させていただきます。

Win32プログラミングを始めるにあたって雛形となるプログラムを書いたのですが、なぜかCreateWindow関数の部分でNULLが帰ってしまいます

以下ソースコード

コード:

#include <Windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE,int);
TCHAR szClassName[] = TEXT("Win32テスト");

HWND hWnd;

HINSTANCE hInstance;//インスタンスハンドルのグローバル変数

//エントリーポイント
int WINAPI WinMain(HINSTANCE hCurInstance,HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,int nCmdShow){
		MSG msg;

		hInstance = hCurInstance;
		BOOL bRet;
		if(!InitApp(hCurInstance))               return -1;
		if(!InitInstance(hCurInstance,nCmdShow)) return -1;
		while((bRet = GetMessage(&msg,NULL,0,0)) != 0){
			if(bRet == -1){
				break;
			} else {
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}
		return (int)msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp){
	switch (msg) {
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		DefWindowProc( hWnd, msg, wp, lp );
	}
	return 0;
}

ATOM InitApp(HINSTANCE hInst){
	WNDCLASSEX wc;
	wc.cbSize            = sizeof(WNDCLASSEX);
	wc.style             = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc       = WndProc;
	wc.cbClsExtra        = 0;
	wc.cbWndExtra        = 0;
	wc.hInstance         = hInst;
	wc.hIcon             = (HICON)LoadImage(          // アイコン
		NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON,
		0, 0, LR_DEFAULTSIZE | LR_SHARED
		);
	wc.hIconSm           = wc.hIcon;
	wc.hCursor           = (HCURSOR)LoadImage(      // マウスカーソル
		NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR,
		0, 0, LR_DEFAULTSIZE | LR_SHARED);
	wc.hbrBackground     = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName      = NULL;
	wc.lpszClassName     = szClassName;

	return RegisterClassEx(&wc);
}

BOOL InitInstance(HINSTANCE hInst,int nCmdShow){
	hWnd =   CreateWindow( szClassName,           // ウィンドウクラス名
		TEXT("Win32"),             // タイトルバーに表示する文字列
		WS_OVERLAPPEDWINDOW,   // ウィンドウの種類
		CW_USEDEFAULT,         // ウィンドウを表示する位置(X座標)
		CW_USEDEFAULT,         // ウィンドウを表示する位置(Y座標)
		CW_USEDEFAULT,         // ウィンドウの幅
		CW_USEDEFAULT,         // ウィンドウの高さ
		NULL,                  // 親ウィンドウのウィンドウハンドル
		NULL,                  // メニューハンドル
		hInst,                 // インスタンスハンドル
		NULL                   // その他の作成データ
		);

	if(hWnd == NULL) return FALSE; // NULLが帰ってくる

	ShowWindow(hWnd,nCmdShow);
	UpdateWindow(hWnd);
	return TRUE;
}
自分でいろいろ可能性を考えてみましたが、わかりません。なぜNULLが帰ってしまうのかよろしくお願いします。

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

Re: Win32初歩プログラミング

#2

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

WndProc関数でDefWindowProc( hWnd, msg, wp, lp );の戻り値をreturnするようにしたところ、ウィンドウの作成に成功しました。
38行目を

コード:

        return DefWindowProc( hWnd, msg, wp, lp );
に書き換えます。

CreateWindowEx() returns NULL, GetLastError() returns 0???
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: Win32初歩プログラミング

#3

投稿記事 by rozeo » 11年前

ありがとうございます。うまくウィンドウが表示されました。
またなにかつまづいたらよろしくお願いします。

閉鎖

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