DD.です。
お世話になります<(_ _)>
度々申し訳ないです。
WindowsXP SP2 : VS2005 Pro
Win32アプリ(SDK)にリソースでダイアログボックスを一つ追加しました。
ダイアログのみ使用になるので CreateWindow() 等は使用していません。
エラーの症状は
DialogBox()呼び出し時にエラーが発生します。
エラー内容は、「指定されたリソース名がイメージファイルに見つかりません。」になります。
以下コード抜粋:
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode )
{
(void)hPrevInst; (void)lpszArgs; (void)nWinMode;
InitApp();
INT_PTR result;
result = DialogBox( hInst, "IDD_DIALOG1", NULL, (DLGPROC)DlgProc );
if ( result == 0 ) {
char err_str[256];
int err_size = 256;
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), NULL, err_str, err_size, NULL );
MessageBox( NULL, err_str, "パラメータが無効です", MB_OK );
} else if ( result == -1 ) {
char err_str[256];
int err_size = 256;
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), NULL, err_str, err_size, NULL );
MessageBox( NULL, err_str, "何らかの原因です", MB_OK );
}
return 0;
}
Microsoftサイトより、DialogBox()の戻り値が "0" の場合には「パラメータが無効」もしくは「従来のWindowsのバージョンとの互換性」が問題であり、"-1" の場合にはそれ以外の問題がある。と、記載されていました。
本プログラムでは "-1" が帰ってきます。
作成しているダイアログは現在はデフォルトの状態で、「OK」「キャンセル」のボタンが存在するのみです。
リソースファイルより抜粋:
IDD_DIALOG1 DIALOGEX 0, 0, 337, 231
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
...
END
resource.h より抜粋:
#define IDD_DIALOG1 101
resource.h はインクルードしてあります。
リソースファイルもプロジェクトには組み込んであるのですが、それを見に行っていないようにも思えます。
リソースファイルをプロジェクトからはずした状態でもエラー内容は同じでした。
こういった内容で何がエラーの原因として考えられるでしょうか?
ご存知の方いましたご教授お願い致します。
> こういった内容で何がエラーの原因として考えられるでしょうか?
リソース識別子の師弟が間違ってます。
MAKEINTRESOURCE を調べてみてください。
> リソース識別子の師弟が間違ってます。
リソース識別子の指定が間違ってます。
> result = DialogBox( hInst, "IDD_DIALOG1", NULL, (DLGPROC)DlgProc );
名前(リテラル)で指定する場合は
> #define IDD_DIALOG1 101
してあるとだめです。
#defineを削除するか、Banさんの指摘通りMAKEINTRESOURCEを使うかどちらかになります。
> > #define IDD_DIALOG1 101
> してあるとだめです。
間違えていました。
問題なのは
> IDD_DIALOG1 DIALOGEX 0, 0, 337, 231
こちらですね。
"IDD_DIALOG1" DIALOGEX 0, 0, 337, 231
かな。
「猫わか」42章
http://www.kumei.ne.jp/c_lang/sdk/sdk_42.htm
うぁ、、、
Banさん、Blueさん、ありがとうございます。そしてすいません<(_ _)>
初歩的もいいところでしたねorz
猫でもわかる〜も参照してたんですがほんとに最初のほうの章ばっか見てました。
無事に解決致しました。
> "IDD_DIALOG1" DIALOGEX 0, 0, 337, 231
あれ?よくわからなくなってきた。。。
誤爆しているっぽいので無視してください。。orz