LoadIconでエラー 原因は??

このQ&Aのポイント
  • Borland C++ 5.5.1を使用してウィンドウアプリケーションを作成しています。
  • LoadIconで自作アイコンをロードするとNULLが返ってきてしまいます。
  • ビルドエラーは発生せず、リソースハッカーでexeにアイコンが組み込まれていますが、LoadIconがNULLを返す理由がわかりません。
回答を見る
  • ベストアンサー

LoadIconでエラー 原因は??

Windowsプログラミング初心者です。 皆さんのお知恵をお貸しください。 Borland C++ 5.5.1でウィンドウアプリケーションを作っているのですが、LoadIconで自作アイコンをロードするとNULLが返ってきてしまいます。 アイコンは32x32 256色、32x32 16色のデバイスを持つ"myapp.ico"と、16x16 256色、16x16 16色のデバイスを持つ"mysmallapp.ico"。(どちらもシェアウェアのアイコンエディタで作成) rcファイルとcppファイルは次のようになっています。 [myapp.rc] MYICON ICON DISCARDABLE "myapp.ico" MYSMALLICON ICON DISCARDABLE "mysmallapp.ico" [myapp.cpp] BOOL InitApp(HINSTANCE hInst) { WNDCLASSEX wc; ... wc.hIcon = LoadIcon(hInst, "MYICON"); // NULLが返る wc.hIconSm = LoadIcon(hInst, "MYSMALLICON"); // NULLが返る ビルドの際にエラーは発生していません。 リソースハッカーでexeを開くと指定したアイコンが組み込まれています。 この状況下でLoadIconがNULLを返す条件はどのようなものが考えられるでしょうか。 OSはWindows 2000Sです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

LoadIcon( hInst,MAKEINTRESOURCE(MYICON) ); ではどうですか? NULLは関数が失敗していることを意味しますが GetLastError()関数で、より詳細な理由がわかります。 GetLastError()関数の 使い方はこのページのソースを参照してみてください。

参考URL:
http://www.doumo.jp/modules/etc/myfncswin.html
mrumesuke
質問者

お礼

回答ありがとうございます。 結論から先に言うと、うまくいきました!! まず、教えていただいた情報を参考にエラーの詳細を取得してみました。 エラーの内容は「指定されたリソースの種類がイメージ ファイルに見つかりません。」というものでした。「見つけろよ~」と思わずぼやいてしまいたくなるメッセージです。。。 次にMAKEINTRESOURCEを試してみたところエラーがなくなり、(センスのない)自作アイコンが無事に表示されました!! なるほどー、なるほどー。 こういうことだったのですね。 教えていただいた情報はどちらも非常に参考になりました。 ありがとうございました。 また何かありましたらよろしくお願いします。

関連するQ&A

  • ShellAbout(hWnd,"","",LoadIcon(?));

    BCC32 で、 ShellAbout(hWnd,"","",LoadIcon(hInst, IDI_APPLICATION)); ShellAbout(hWnd,"","",LoadIcon(NULL, IDI_APPLICATION)); ↑ならアイコンに関してどっちでもできるけど、リソースで MYICONSM ICON DISCARDABLE "ico.ico" として、 ShellAbout(hWnd,"","",LoadIcon(hInst, "MYICON"); ShellAbout(hWnd,"","",LoadIcon(NULL, "MYICON")); ↑はアイコンに関してどっちも無効で旗になります。 BCC32 で ShellAbout( ) で自作アイコンを表示するには どうしたらいいんですか? #include <windows.h> #include <shellapi.h> HINSTANCE hInst; HICON hIcon; LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){  switch (uMsg){  case WM_LBUTTONDOWN:   ShellAbout(hWnd,"","",?;  break;  case WM_DESTROY:   PostQuitMessage(0);  break;  default:   return DefWindowProc(hWnd,uMsg,wParam,lParam);  }  return 0; } int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int){  HWND hWnd;  WNDCLASSEX wc;  MSG msg;  wc.cbSize =略  wc.style =  wc.lpfnWndProc =  wc.hInstance =  wc.cbClsExtra =  wc.cbWndExtra =  wc.lpszMenuName =  wc.lpszClassName =  wc.hIcon =  wc.hCursor =  wc.hbrBackground =  RegisterClassEx(&wc);  hWnd = CreateWindow(wc.lpszClassName,"TEST",WS_OVERLAPPEDWINDOW,      0,0,640,480,NULL,NULL,hInst,NULL);  ShowWindow(hWnd,SW_SHOWNORMAL);  UpdateWindow(hWnd);  while(GetMessage( &msg, NULL, 0, 0)){   TranslateMessage( &msg );   DispatchMessage( &msg );  }  return 0; }

  • 不明なエラー

    「猫でもわかるC言語プログラミング」で独習しております。 深い意味などは分からないところも多いのですが 慣れるためにひたすらコーディングしております。 質問が要領を得ないかもしれませんがお許しください。 補足が必要でしたら教えてください。 第11章の最後の課題なのですが、Windowsのウィンドウを作成する課題になります。 いろいろ調べましたがエラーの原因がわかりません。 45、51、59行目でエラーがでており、 データのサイズ違いのようなのですが そのあとの「undefined reference to `GetStockObject@4'」 の部分が調べてみたのですが、わかりません。 エラー内容と、コードを以下に記します。 もしよろしければどなたかアドバイスお願いします。 よろしくお願いいたします。 ***環境*** エディタ:サクラエディタ コンパイラ:MinGW ***エラー内容*** C:\source2\c11>g++ -Wall template01.cpp template01.cpp: In function `ATOM InitApp(HINSTANCE__*)': template01.cpp:45: warning: cast from pointer to integer of different size template01.cpp:51: warning: cast from pointer to integer of different size template01.cpp:59: warning: cast from pointer to integer of different size C:\Users\****\AppData\Local\Temp/ccgXbaaa.o(.text+0x14f):template01.cpp: undefin ed reference to `GetStockObject@4' ***実際のコード*** // template.cpp #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT ,WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); char szClassName[] = "template"; //ウィンドウクラス int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; if (!InitApp(hCurInst)) return FALSE; if (!InitInstance(hCurInst, nCmdShow)) return FALSE; while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if (bRet == -1) { break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウクラスの登録 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.hCursor =(HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; hWnd = CreateWindow(szClassName, //タイトルバーにこの名前が表示されます "windowを作成", WS_OVERLAPPEDWINDOW, // ウィンドウの種類 CW_USEDEFAULT, // x座標 CW_USEDEFAULT, // y座標 CW_USEDEFAULT, // 幅 CW_USEDEFAULT, // 高さ NULL, // 親ウィンドウのハンドル、親を作るときはNULL NULL, // メニューハンドル // クラスメニューを使うときはNULL hInst, // インスタンスハンドル NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // ウィンドウプロシージャ LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { int id; switch(msg) { case WM_CLOSE: id = MessageBox(hWnd, "終了してもよろしいですか", "確認", MB_YESNO | MB_ICONQUESTION); if (id == IDYES) DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }

  • BRC32.exeは本当にリンクも出来るのでしょうか?

    Borland BCC 5.5.1 を使っています。 アイコンファイルを埋め込もうとしていますがどうやってもうまくいきません。 test.cpp中の関連部分: wc.hIcon = LoadIcon(hInstance , TEXT("JUSTIC")); test.rcの内容: JUSTIC ICON "test.ico" 以上の状況で、 bcc32 -W test.cpp brc32 test.rc test.exe とやるのですがエラーも無く終了します。 バイナリのresファイルも出来ます。 しかし肝心のリンクはされていません。 統合環境でmakeしますとちゃんとリンクされます。 コマンドラインからの処理でどこか間違っているのでしょうか? いろいろと調べましたが解決に至っていません。 ほとほと困り果てています。 ご教示願えませんでしょうか。 どうぞよろしくお願い申し上げます。

  • Windowsプログラミングのひな形の段階でエラーが出てしまいます。

    指定されたパスが見つかりませんと出てウィンドウが生成されません。 コードが違うのでしょうか・・それともプロジェクトの作り方に問題があるのでしょうか。VisualStudio2005のVisual C++でつくっています。 以下コードです↓ //hinagata.cpp #include<windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE,int); char szClassName[]="hinagata"; int WINAPIMain(HINSTANCE hCurInst,HINSTANCE hPrevInst,LPSTR lpsCmdline,int nCmdShow) { MSG msg; BOOL bRet; if(!InitApp(hCurInst)) return FALSE; if(!InitInstance(hCurInst,nCmdShow)) return FALSE; while((bRet=GetMessage)&msg,NULL,0,0))!=0){ if(bRet==-1){ MessageBox(NULL,"GetMessageエラー","Error",MB_OK); break; }else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return(int)msg.wParam; } //ウィンドウクラスの登録 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.hCursor=(HCORSOR)Loadimage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName=NULL;//メニュー名 wc.lpszClassName=(LPCSTR)szClassName; wc.hIconSm=(HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return(RegisterClassEx(&wc)); } //ウィンドウの作成 BOOL InitInstance(HINSTANCE hInst,int nCmsShow) { HWND hWnd; hWnd=CreateWindow(szClassName, //タイトルバーにこの名前が表示される "犬でもわかるWindowsプログラミング", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp) { switch(msg){ case WM_DESTROY: PostQuitMessage(0); break; dafault: return(DefWindowProc(hWnd,msg,wp,lp)); } return 0; }

  • LoadImageを使ったアイコンファイルの読み込みの前処理

    いつも、お世話になっております。 小生、只今WindowsXPSP3上にてC言語とWin32APIを使い、BCC5.5.1でコンパイルし、Windowsプログラミングを勉強しています。 アイコンの読み込みについて質問なのですが、 WndProc関数内のWM_CREATEメッセージにて、アイコンを読み込みたいのですが、ビットマップを読み込む時の様に、CreateCompatibleDCを使い、 メモリデバイスコンテキストを作成する必要があるのでしょうか?? 以下にコードを記します。 お忙しい中、大変、申し訳ございませんが。 先輩方、アドバイスの方、宜しくお願いします。 #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE, LPCSTR); BOOL InitInstance(HINSTANCE, int, LPCSTR); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; LPCSTR szClassName = "アイコンを読み込む"; if(!InitApp(hCurInst, szClassName)){ return FALSE; } if(!InitInstance(hCurInst, nCmdShow, szClassName)){ return FALSE; } while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){ if(bRet == -1){ MessageBox(NULL, "GetMessage Error", "Error", MB_OK); break; } else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst, LPCSTR szClassName) { 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.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 = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow, LPCSTR szClassName) { HWND hWnd; hWnd = CreateWindow( szClassName, "Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd){ return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { static HICON hIcon; switch(msg){ case WM_CREATE: //ここにメモリデバイスコンテキストを取得の処理が必要?? hIcon = (HICON)LoadImage( NULL, "Linux.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE); if(hIcon == NULL){ MessageBox(hWnd, "It failed in reading the icon file.", "Error", MB_OK | MB_ICONWARNING); return 0; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }

  • プログラミングでエラーが出ました。教えてください。

    Visual C++ 2010で 1>LINK : fatal error LNK1561: エントリー ポイントを定義しなければなりません。 というエラーが出ました。 プログラムは、↓です。 #include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); TCHAR szClassName[] = TEXT("sample01"); int WINAPI WInMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow){ MSG msg; BOOL bRet; if(!InitApp(hCurInst)) return FALSE; if(!InitInstance(hCurInst, nCmdShow)) return FALSE; while((bRet = GetMessage(&msg, NULL, 0, 0))!= 0){ if(bRet == -1){ MessageBox(NULL, TEXT("GetMassageエラー"),TEXT("Error"),MB_OK); break; }else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } 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.hCursor = (HICON)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; wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } BOOL InitInstance(HINSTANCE hInst, int nCmdShow){ HWND hWnd; hWnd = CreateWindow(szClassName,TEXT("猫でもわかるWindowsプログラミング"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ switch(msg){ case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } 教えてください。 よろしくお願いします。

  • LoadImageを使用し、タイトルバーのアイコンを表示したいのですが。

    こんにちは。 いつもお世話になっております。 小生、只今WindowsXPSP3上で、C言語とWin32APIを使用し、BCC5.5.1でコンパイルしながら、Windowsプログラミングを勉強しています。 度々、質問させて頂き、その都度回答を頂戴し、誠に恐縮ではあるのですが、今回も質問させて下さい。 内容はLoadImage関数を利用した、タイトルバーのアイコン表示です。 以下のコードを試しても、タイトルバーにアイコンが表示されません。 かといって、色々なサイトを見、LoadIconを使用しようとして、MSDNを調べると"この関数は、LoadImage 関数に取って代わられました。"と表記されています。 #if 1 /* タイトルバーにアイコン表示 */ #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE, LPCSTR); BOOL InitInstance(HINSTANCE, int, LPCSTR); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; LPCSTR szClassName = "TitleBarIcon"; if(!InitApp(hCurInst, szClassName)){ return FALSE; } if(!InitInstance(hCurInst, nCmdShow, szClassName)){ return FALSE; } while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){ if(bRet == -1){ MessageBox(NULL, "GetMessage Error", "Error", MB_OK); break; } else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst, LPCSTR szClassName) { 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, "Linux.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_SHARED); 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 = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow, LPCSTR szClassName) { HWND hWnd; hWnd = CreateWindow( szClassName, "TitleBarIcon", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, hInst, NULL); if(!hWnd){ return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch(msg){ case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } お忙しい中、申し訳ございませんが、 先輩方、アドバイス宜しくお願い致します。 ちなみに読み込んでいるアイコンのサイズは幅、高さとも32ピクセルです。

  • Windowsプログラミング

    識別子が無効ですといわれて困ってます。一応打ち込んだものを乗せておきます。VisualC++2008でやりました。 // sample01.cpp #include<windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTACE); BOOL InitInstance(HINSTANCE); TCHAR szClassName[] = TEXT("sample01"); // ウィンドウクラス int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; if (!InitApp(hCurInst)) return FALSE; if (!InitInstance(hCurInst, nCmdShow)) return FALSE; while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if (bRet == -1) { MessageBox(NULL, TEXT("GetMessageエラー"), TEXT("Error"), MB_OK); break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } } // ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndPrec; // プロシージャ名 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.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; wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } // ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; hWnd = CreateWindow(szClassName, // タイトルバーにこの名前が表示されます TEXT("猫でもわかるWindowsプログラミング"), WS_OVERLAPPEDWINDOW, // ウィンドウの種類 CW_USEDEFAULT // x座標       CW_USEDEFAULT // y座標    CW_USEDEFAULT // 幅   CW_USEDEFAULT // 高さ NULL, // 親ウィンドウのハンドル、親を作るときはNULL NULL, // メニューハンドル、クラスメニューを // 使うときはNULL hInst, // インスタントハンドル NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UNIT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } 長いですがよろしくお願いします。 return 0; }

  • リソースファイルの結合ができない

    borland C++とBCC Form を使ってプログラミングをしている初心者です。test03というリソースファイルと同じ名前のcppファイルをつくって brc32 test03.rc test03.exe と コマンドプロンプト上で入力して実行したのですが  Fatal: ファイル test03.exeが開けません と出てきてしまいます。 いったいどうしたらいいのでしょうか? 説明に不足があればまた足しますのでよろしくお願いします。 BCC Form の設定は リソースタイプはメニュー ID名はMYMENU 管理番号は0 メニュー表示編集用ウィンドウはdefault設定です。 test03.cppの内容は // test03.cpp #include <windows.h> #include "Resform01.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); char szClassName[] = "test03"; // window class int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; if (!InitApp(hCurInst)) return FALSE; if (!InitInstance(hCurInst, nCmdShow)) return FALSE; while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if (bRet == -1) { break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウ・クラスの登録 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.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = "MYMENU"; //メニュー名 wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; hWnd = CreateWindow(szClassName, "リソーステスト", WS_OVERLAPPEDWINDOW, //ウィンドウの種類 CW_USEDEFAULT, //X座標 CW_USEDEFAULT, //Y座標 CW_USEDEFAULT, //幅 CW_USEDEFAULT, //高さ NULL, NULL, hInst, NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { int id; switch (msg) { case WM_COMMAND: switch (LOWORD(wp)) { case IDM_EXIT: SendMessage(hWnd, WM_CLOSE, 0, 0); break; } break; case WM_CLOSE: id = MessageBox(hWnd, "終了してもよろしいですか", "確認", MB_YESNO | MB_ICONQUESTION); if (id == IDYES) DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } です。リソースファイル(test03.rc)もcppファイル(test03.cpp)もbofileというディレクトリに保存してあります。

  • タイトルバーの小さいアイコンを指定したい

    初心者質問ですみません。 //resource.h #define IDI_MYICON 101 //main.cpp WNDCLASSEX wc; wc.hIcon = LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_MYICON)); wc.hIconSm = LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_MYICON)); とやっているのですがEXEファイルのほうはアイコンが変わっているのにタイトルバーのサムネイルがなぜか「黄色い三角形の中にびっくりマーク」になっています。 IDI_MYICONを102と定義すると「噴出しの中にはてなマーク」が表示されます。 デバッグでhIconとhIconSmの中身を見たところ同じ値が入っているので関数が失敗しているわけではなさそうです。 にもかかわらずタイトルバーのサムネイルとEXEのアイコンが違うのはなぜでしょうか。 わかる方よろしくお願いします。

専門家に質問してみよう