🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1699閲覧

VisualC++WINAPIでメニューバーが表示されない問題について。

tettyA

総合スコア93

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/02/28 12:50

編集2021/02/28 12:54

こちらのサイトをもとにコードを書いていたのですが何故かメニューバーが表示されません。
しっかり、ウィンドウは表示されるのですが、そこまでです。なぜでしょうか?
今までは普通に表示されていましたが、急に表示されなくなりました。
以下にコードを載せておきます。

C++

1#include <Windows.h> 2#include "resource.h" 3LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { 4 switch (msg) { 5 case WM_DESTROY: 6 PostQuitMessage(0); 7 return 0; 8 } 9 return DefWindowProc(hwnd, msg, wp, lp); 10} 11 12int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 13 PSTR lpCmdLine, int nCmdShow) { 14 HWND hwnd; 15 MSG msg; 16 WNDCLASS winc; 17 18 winc.style = CS_HREDRAW | CS_VREDRAW; 19 winc.lpfnWndProc = WndProc; 20 winc.cbClsExtra = winc.cbWndExtra = 0; 21 winc.hInstance = hInstance; 22 winc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 23 winc.hCursor = LoadCursor(NULL, IDC_ARROW); 24 winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 25 winc.lpszMenuName = TEXT("IDR_MENU1"); 26 winc.lpszClassName = TEXT("KITTY"); 27 28 if (!RegisterClass(&winc)) return -1; 29 30 hwnd = CreateWindow( 31 TEXT("KITTY"), TEXT("Kitty on your lap"), 32 WS_OVERLAPPEDWINDOW | WS_VISIBLE, 33 CW_USEDEFAULT, CW_USEDEFAULT, 34 CW_USEDEFAULT, CW_USEDEFAULT, 35 NULL, NULL, hInstance, NULL 36 ); 37 38 if (hwnd == NULL) return -1; 39 40 while (GetMessage(&msg, NULL, 0, 0)) { 41 TranslateMessage(&msg); 42 DispatchMessage(&msg); 43 } 44 return msg.wParam; 45}

resource.h

C++

1//{{NO_DEPENDENCIES}} 2// Microsoft Visual C++ で生成されたインクルード ファイル。 3// testwinapi.rc で使用 4// 5#define IDR_MENU1 101 6 7// Next default values for new objects 8// 9#ifdef APSTUDIO_INVOKED 10//薄暗くなっているので省略 11#endif 12#endif 13

Resourse

1// Microsoft Visual C++ generated resource script. 2// 3#include "resource.h" 4 5#define APSTUDIO_READONLY_SYMBOLS 6///////////////////////////////////////////////////////////////////////////// 7// 8// Generated from the TEXTINCLUDE 2 resource. 9// 10#include "winres.h" 11 12///////////////////////////////////////////////////////////////////////////// 13#undef APSTUDIO_READONLY_SYMBOLS 14 15///////////////////////////////////////////////////////////////////////////// 16// 日本語 (日本) resources 17 18#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) 19LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT 20#pragma code_page(932) 21 22#ifdef APSTUDIO_INVOKED 23///////////////////////////////////////////////////////////////////////////// 24// 25// TEXTINCLUDE 26// 27 281 TEXTINCLUDE 29BEGIN 30 "resource.h\0" 31END 32 332 TEXTINCLUDE 34BEGIN 35 "#include ""winres.h""\r\n" 36 "\0" 37END 38 393 TEXTINCLUDE 40BEGIN 41 "\r\n" 42 "\0" 43END 44 45#endif // APSTUDIO_INVOKED 46 47 48///////////////////////////////////////////////////////////////////////////// 49// 50// Menu 51// 52 53IDR_MENU1 MENU 54BEGIN 55 MENUITEM "ファイル(&F)", 0 56END 57 58#endif // 日本語 (日本) resources 59///////////////////////////////////////////////////////////////////////////// 60 61 62 63#ifndef APSTUDIO_INVOKED 64///////////////////////////////////////////////////////////////////////////// 65// 66// Generated from the TEXTINCLUDE 3 resource. 67// 68 69 70///////////////////////////////////////////////////////////////////////////// 71#endif // not APSTUDIO_INVOKED 72

イメージ説明
VC++2019です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

なんかwin32触るの久しぶりだなぁ、なんですが。

c

1 winc.lpszMenuName = TEXT("IDR_MENU1");

ではなく、

c

1 winc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);

ではないですか。

c

1#define IDR_MENU1 101

というように、リソースIDを数値で指定している場合には、MAKEINTRESOURCEマクロで指定する必要があったはずです。

投稿2021/02/28 13:13

katsuko

総合スコア3538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tettyA

2021/02/28 13:48

ありがとうございました! MAKEINTRESOURCEなんて初めて知りました。 何故今までは出来ていたのだろうか...?
dodox86

2021/03/01 03:08

> 何故今までは出来ていたのだろうか...? 恐らく以前は「IDR_MENU1」がresource.hなどで#define IDR_MENU1 123 などとちゃんと定義されていなかったのだと思います。何かの編集の機会にちゃんとマクロで定義するようになったのでは? リソースファイルで IDR_MENU1 MENU BEGIN ... のように書かれていた場合、IDR_MENU1はLPSTR/LPWSTR文字列です。MAKEINTRESOURCEマクロは整数を無理やりLPSTR/LPWSTRにキャストします。 MAKEINTRESOURCE(A)マクロは以下のようになっています。 #define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
tettyA

2021/03/01 09:21

なるほど。 確かに今回はしっかり定義しました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問