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

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

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

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Win32 API

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

C++

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

Q&A

解決済

1回答

1940閲覧

ウィンドウの異常な表示を修正したい

Y.K_CDB

総合スコア8

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Win32 API

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

C++

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

0グッド

0クリップ

投稿2017/03/01 05:31

###前提・実現したいこと
win32API+VS2015を用いてローカルネットワークサーバーへログインする簡易なGUIを作りたい。
プログラミング初心者

###発生している問題・エラーメッセージ
ウィンドウの縁や最上段のウィンドウ名が表示されない。

###該当のソースコード

C++

1#include <iostream> 2#include <string> 3#include <fstream> 4#include <windows.h> //WINAPIヘッダ 5#include <windowsx.h> 6#pragma comment(lib, "user32.lib") //必須ライブラリ1 7#pragma comment(lib, "gdi32.lib") //必須ライブラリ2 8 9//定義 10#define NAME "Section1.2 window base" //タイトルバーに表示するテキスト 11#define WND_WIDTH 301 //ウィンドウのx 12#define WND_WEIGHT 239 //ウィンドウのy 13#define FONTPIX 11 //フォントサイズ 14 15using namespace std; 16 17//グローバル変数 18RECT recDisplay, recWindow, recClient; 19WNDPROC DefStaticProc; 20HBRUSH hBkColor; 21BOOL bCap = FALSE; 22 23//関数プロトタイプ宣言 24LRESULT CALLBACK StaticProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); 25 26//Windws イベント用関数 27LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { 28 29 char cStr[256]; 30 char *sp = " "; 31 LONG lMouseX = WND_WIDTH - 140, lMouseY = WND_WEIGHT - 60; //座標表示場所指定 32 //メインフォント定義 33 HDC hdc = GetDC(hWnd); 34 int FontW = MulDiv(FONTPIX, GetDeviceCaps(hdc, LOGPIXELSX), 72); 35 ReleaseDC(hWnd, hdc); 36 HFONT hFont = CreateFont(FontW * -1, 37 0, 38 0, 39 0, 40 FW_NORMAL, 41 FALSE, 42 FALSE, 43 FALSE, 44 SHIFTJIS_CHARSET, 45 OUT_DEFAULT_PRECIS, 46 CLIP_DEFAULT_PRECIS, 47 DEFAULT_QUALITY, 48 VARIABLE_PITCH | FF_DONTCARE, 49 TEXT("MS UI Gothic")); 50 LPCTSTR strName = TEXT("なまえ"); 51 TCHAR str[255]; 52 PAINTSTRUCT ps; 53 POINT pPoint; 54 int n = NULL; 55 HWND hComboboxName = NULL, 56 hEditPass = NULL, 57 hButtonLogin = NULL, 58 hButtonHomeLogin = NULL, 59 hButtonLogout = NULL; 60 61 //渡された message から、イベントの種類を解析する 62 switch (msg) { 63 64 //ウィンドウ表示終了判定 65 case WM_DESTROY: 66 DeleteObject(hBkColor); 67 PostQuitMessage(0); 68 return 0; 69 70 //キー判定 71 case WM_KEYDOWN: 72 switch (wParam) { 73 case VK_RETURN: //リターンキー判定 74 DeleteObject(hBkColor); 75 PostQuitMessage(0); //終了処理 76 return 0; 77 } 78 return 0; 79 80 //カーソル移動判定 81 case WM_MOUSEMOVE: { 82 //カーソル座標表示を描画指示する 83 RECT rect = { lMouseX, lMouseY, lMouseX + 120, lMouseY + 20 }; 84 InvalidateRect(hWnd, &rect, false); 85 return 0; 86 } 87 88 //描画処理 89 case WM_PAINT: { 90 HDC hdc = BeginPaint(hWnd, &ps); //描画開始 91 92 //デバッグ用カーソル座標表示 93 GetCursorPos(&pPoint); //カーソル座標取得 94 ScreenToClient(hWnd, &pPoint); //ウィンドウ座標に変換 95 sprintf_s(cStr, "x = %3d, y = %3d", pPoint.x, pPoint.y); //文字列化 96 FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW)); //ウィンドウ初期化 97 TextOut(hdc, lMouseX, lMouseY, cStr, lstrlen(cStr)); //座標表示 98 99 EndPaint(hWnd, &ps); //描画終了 100 return 0; 101 } 102 //ウィンドウ作成判定 103 case WM_CREATE: { 104 //名前一覧コンボボックス作成 105 hComboboxName = CreateWindow(TEXT("COMBOBOX"), 106 TEXT("なまえ"), 107 WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWNLIST, 108 38, 42, //x,y座標 109 210, FontW + 1, //幅,高さ 110 hWnd, 111 (HMENU)1, 112 ((LPCREATESTRUCT)(lParam))->hInstance, 113 NULL); 114 115 //パスワード入力フォーム作成 116 hEditPass = CreateWindowEx(WS_EX_CLIENTEDGE, 117 TEXT("EDIT"), 118 NULL, 119 WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_LEFT | ES_PASSWORD, 120 38, 90, //x,y座標 121 210, FontW + 8, //幅,高さ 122 hWnd, 123 NULL, 124 ((LPCREATESTRUCT)(lParam))->hInstance, 125 NULL); 126 DefStaticProc = (WNDPROC)GetWindowLong(hEditPass, GWL_WNDPROC); 127 SetWindowLong(hEditPass, GWL_WNDPROC, (LONG)StaticProc); 128 129 //ボタンフォーム作成 130 hButtonLogin = CreateWindow(TEXT("BUTTON"), 131 TEXT("Action !!"), 132 WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, 133 38, 133, 134 66, FontW + 8, 135 hWnd, 136 NULL, 137 ((LPCREATESTRUCT)(lParam))->hInstance, 138 NULL); 139 140 hButtonHomeLogin = CreateWindow(TEXT("BUTTON"), 141 TEXT("*押すな*"), 142 WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, 143 38 + 72, 133, 144 66, FontW + 8, 145 hWnd, 146 NULL, 147 ((LPCREATESTRUCT)(lParam))->hInstance, 148 NULL); 149 150 hButtonLogout = CreateWindow(TEXT("BUTTON"), 151 TEXT("Reset"), 152 WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, 153 38 + 72 + 72, 133, 154 66, FontW + 8, 155 hWnd, 156 NULL, 157 ((LPCREATESTRUCT)(lParam))->hInstance, 158 NULL); 159 160 //フォームフォント設定 161 SetWindowFont(hComboboxName, hFont, TRUE); 162 SetWindowFont(hEditPass, hFont, TRUE); 163 SetWindowFont(hButtonLogin, hFont, TRUE); 164 SetWindowFont(hButtonHomeLogin, hFont, TRUE); 165 SetWindowFont(hButtonLogout, hFont, TRUE); 166 167 //背景処理 168 HDC hdc = GetDC(hWnd); 169 SetBkMode(hdc, TRANSPARENT); 170 ReleaseDC(hWnd, hdc); 171 172 return 0; 173 } 174 175 //その他 176 return DefWindowProc(hWnd, msg, wParam, lParam); 177 178 } 179} 180//右クリック防止関数 181LRESULT CALLBACK StaticProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { 182 switch (msg) { 183 case WM_CONTEXTMENU: 184 return 0; 185 186 default: 187 CallWindowProc(DefStaticProc, hWnd, msg, wParam, lParam); 188 } 189 190} 191 192//Windows Main 関数 193int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { 194 HWND hWnd, hDeskWnd; 195 MSG msg; 196 197 hBkColor = CreateSolidBrush(RGB(0xF0, 0xF0, 0xF0)); 198 // Set up and register window class 199 WNDCLASS wc = {CS_CLASSDC, 200 WndProc, //イベントcallback関数 201 0, 202 0, 203 hInstance, 204 NULL, //アイコン 205 LoadCursor( NULL, IDC_ARROW ), //マウスカーソル 206 hBkColor, //背景色 207 NULL, //メニュー 208 NAME}; //クラス名 209 if(RegisterClass(&wc) == 0) return FALSE; 210 211 hDeskWnd = GetDesktopWindow(); 212 GetWindowRect(hDeskWnd, &recDisplay); 213 //ウインドウ生成 214 hWnd = CreateWindow(NAME, //タイトルバーテキスト 215 NAME, //クラス名 216 WS_OVERLAPPEDWINDOW | WS_VISIBLE, //ウインドウスタイル 217 75/* (recDisplay.right - WND_WIDTH) */, //ウインドウ左上x座標 218 60/* (recDisplay.bottom - WND_WWIGHT) */, //ウインドウ左上y座標 219 WND_WIDTH, //ウインドウ幅 220 WND_WEIGHT, //ウインドウ高さ 221 NULL, //親ウインドウのハンドル 222 NULL, 223 hInstance, 224 NULL); 225 if(!hWnd) return FALSE; 226 227 ShowWindow(hWnd, nCmdShow); //Window を表示 228 UpdateWindow(hWnd); //表示を初期化 229 SetFocus(hWnd); //フォーカスを設定 230 231 while(GetMessage(&msg, NULL, 0, 0)){ 232 TranslateMessage(&msg); 233 DispatchMessage(&msg); 234 } 235 return msg.wParam; 236}

###補足情報(言語/FW/ツール等のバージョンなど)
win10(64bit)
VisualStudio Communityで作成

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

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

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

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

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

guest

回答1

0

ベストアンサー

WndProc()内の最後のreturnswitch文の中に入ってしまっています。
switch文の外に出すか、default:returnの前に追加することで無事表示されました。

投稿2017/03/01 06:50

ttyp03

総合スコア16998

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

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

Y.K_CDB

2017/03/02 17:49

仰ったとおりにするとあっさり治りました この度はありがとうがざいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問