質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Win32 API

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

C++

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

Q&A

解決済

1回答

877閲覧

WINAPIでMDI子ウィンドウが存在するのに表示されない

tettyA

総合スコア93

Win32 API

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

C++

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

0グッド

0クリップ

投稿2020/11/10 09:46

編集2020/11/10 10:33

タイトルの通り、MDI子ウィンドウが存在しているのに、そのウィンドウが表示されません。
何がいけないのか調べてもわからなかったので、質問させていただきます。
ちなみにWM_SIZE部分をコメントアウトしたらしっかり表示されます。(描画がおかしくなりますが。)
ソースコード

C++

1#include <windows.h> 2#include <commctrl.h> 3 4#include "resource.h" 5#include "common.h" 6 7#pragma comment(lib,"comctl32.lib") 8 9#define TITLE TEXT("Hyper Map Editor") 10#define MDI_FRAME TEXT("FRAMEWINDOW") 11#define MDI_CHILD TEXT("MDICHILD") 12 13HINSTANCE hIns;//現在のインターフェース 14HWND hCHildWndMap; 15 16#define ID_CHILDWND 0x100 17LRESULT CALLBACK FrameProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { 18 static HWND hToolbar; 19 static HBITMAP hBitmap; 20 CLIENTCREATESTRUCT ccsClient; 21 static HWND hClientWindow; 22 switch (msg) 23 { 24 case WM_DESTROY: 25 DeleteObject(hBitmap); 26 PostQuitMessage(0); 27 return 0; 28 case WM_CREATE: 29 ccsClient.hWindowMenu = GetSubMenu(GetMenu(hWnd), 4); 30 ccsClient.idFirstChild = ID_CHILDWND; 31 32 hClientWindow = CreateWindow(TEXT("MDICLIENT"), NULL, 33 WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE| WS_CLIPSIBLINGS, 34 0, 0, 0, 0, hWnd, (HMENU)1, ((LPCREATESTRUCT)lp)->hInstance, &ccsClient 35 ); 36 InitCommonControls(); 37 hBitmap = LoadBitmap( 38 ((LPCREATESTRUCT)lp)->hInstance, 39 TEXT("IDB_BITMAP2") 40 ); 41 hStatus = CreateWindowEx( 42 NULL, 43 STATUSCLASSNAME, 44 NULL, 45 WS_CHILD 46 | SBARS_SIZEGRIP 47 | CCS_BOTTOM 48 | WS_VISIBLE, 49 0, 0, 0, 0, 50 hWnd, 51 (HMENU)ID_STATUS, 52 ((LPCREATESTRUCT)lp)->hInstance, 53 NULL 54 ); 55 56 hToolbar = CreateToolbarEx( 57 hWnd, 58 WS_CHILD | WS_VISIBLE, 59 IDR_TOOLBAR1, 60 10, 61 NULL, 62 (UINT_PTR)hBitmap, 63 tbs, 64 18, 65 0, 0, 66 16, 16, 67 sizeof(TBBUTTON) 68 ); 69 return 0; 70 case WM_SIZE: 71 SendMessage(hToolbar, WM_SIZE, wp, lp); 72 73 SbSize[0] = LOWORD(lp) - 400; 74 SbSize[1] = -1; 75 SendMessage(hStatus, SB_SETPARTS, 2, (LPARAM)SbSize); 76 //文字を挿入 77 SendMessage(hStatus, SB_SETTEXT, 0 | 0, (WPARAM)TEXT("MDI")); 78 SendMessage(hStatus, WM_SIZE, wp, lp); 79 return 0; 80 case WM_COMMAND: 81 switch (LOWORD(wp)) 82 { 83 case IDM_NEWMINIMAP: 84 hCHildWndMap = CreateMDIWindow(MDI_CHILD, TITLE, 0, 85 10, 100, 86 50, 80, 87 hClientWindow, hIns, 0 88 ); 89 break; 90 } 91 break; 92 } 93 return DefFrameProc(hWnd, hClientWindow, msg, wp, lp); 94} 95int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 96 PSTR lpCmdLine, int nCmdShow) { 97 HWND hWnd; 98 MSG msg; 99 WNDCLASS winc; 100 hIns = hInstance; 101 102 winc.style = CS_HREDRAW | CS_VREDRAW; 103 winc.lpfnWndProc = FrameProc; 104 winc.cbClsExtra = winc.cbWndExtra = 0; 105 winc.hInstance = hInstance; 106 winc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 107 winc.hCursor = LoadCursor(NULL, IDC_ARROW); 108 winc.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1); 109 winc.lpszMenuName = TEXT("MYMENU"); 110 winc.lpszClassName = MDI_FRAME; 111 112 if (!RegisterClass(&winc)) return 1; 113 114 winc.lpfnWndProc = DefMDIChildProc; 115 winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 116 winc.lpszClassName = MDI_CHILD; 117 118 if (!RegisterClass(&winc)) return 1; 119 120 hWnd = CreateWindow( 121 MDI_FRAME, TITLE, 122 WS_OVERLAPPEDWINDOW|WS_MAXIMIZE|WS_VISIBLE, 123 CW_USEDEFAULT, CW_USEDEFAULT, 124 CW_USEDEFAULT, CW_USEDEFAULT, 125 NULL, NULL, hInstance, NULL 126 ); 127 128 if (hWnd == NULL) return 1; 129 130 131 while (GetMessage(&msg, NULL, 0, 0)) { 132 TranslateMessage(&msg); 133 DispatchMessage(&msg); 134 } 135 136 return msg.wParam; 137}

common.hにはツールバーのことについてあるので省略します。
実行結果も載せておきます。

イメージ説明

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
再描画しなかったのが原因でした

投稿2020/11/10 10:35

tettyA

総合スコア93

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問