h1j1k1 さんが書きました: ↑7年前
>> Bullさん
私の環境でコンパイルしてみたのですが、タイトルバーは消えることなくしっかり残ってしまっていました,,,
Win7 64bit, MinGW GCCでコンパイル、実行しております
Bullさんはコードを示していません。
あなたが書いたタイトルバーが消えるそのプログラムを貼り付けてください。
h1j1k1 さんが書きました: ↑7年前
少し話ずれますが、27行目RECT rect直後のイコール抜けてますよ
#5 のプログラムですね。
これは、C++11 以降の C++プログラムなので、= なしで初期化できます。
gcc の代わりに g++ でコンパイルするか、ソースファイルの拡張子を
.c ではなく .cpp にして gcc でコンパイルしてみてください。
MingW GCC に C++コンパイラが含まれないのであれば、= を付けてください。
このプログラムは、~WS_CAPTION でタイトルバーが出ないようになっています。
全部がクライアント領域であることを示すために、そこを灰色にしたコードに
変更します。これでどうですか?
コード:
#include <windows.h>
HWND hButton;
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_COMMAND:
if ((HWND)lp == hButton) DestroyWindow(hwnd);
return 0;
case WM_LBUTTONDOWN:
ReleaseCapture();
SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
return 0;
case WM_NCHITTEST:
{
LRESULT res = DefWindowProc(hwnd, WM_NCHITTEST, wp, lp);
return (res == HTCLIENT) ? HTCAPTION : res;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
RECT rect = { 100, 200, 400, 300 };
DrawText(hdc, "ここは、クライアント領域です", -1, &rect, DT_CENTER);
EndPaint(hwnd, &ps);
return 0;
}
}
return DefWindowProc(hwnd, msg, wp, lp);
}
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, PSTR ln, int sh)
{
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = inst;
winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL, IDC_ARROW);
winc.hbrBackground = (HBRUSH)LTGRAY_BRUSH;
winc.lpszMenuName = NULL;
winc.lpszClassName = "Class";
if (!RegisterClass(&winc)) return -1;
HWND hwnd = CreateWindow(
"Class", "TITLE", WS_BORDER | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
NULL, NULL, inst, NULL
);
if (hwnd == NULL) return -1;
LONG style = GetWindowLong(hwnd, GWL_STYLE);
style &= ~WS_CAPTION;
style |= WS_BORDER;
style = SetWindowLong(hwnd, GWL_STYLE, style);
hButton = CreateWindow("BUTTON", "終了",
WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
100, 400, 60, 30, hwnd, NULL, inst, NULL);
if (hButton == NULL) return -1;
MSG msg;
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}