【HSP】閉じるボタンしかないウィンドウを作成【Win32API】

【HSP】閉じるボタンしかないウィンドウを作成【Win32API】

なんかうまくいかないと思ったら、WS_EX_DLGMODALFRAME未指定時にアイコンハンドルNULLにすると、勝手にアイコンが割り当てられるという仕様のせいだった。
↓は正常動作するはずのプログラム (Windows 7 で動作確認済み)

#include "user32.as"

// マクロ
#define FALSE 0
#define TRUE  1

#define SC_MINIMIZE 0xF020
#define SC_MAXIMIZE 0xF030
#define SC_RESTORE  0xF120
#define SC_SIZE     0xF000

#define GCL_HICON   -14
#define GCL_HICONSM -34

#define GWL_STYLE   -16
#define GWL_EXSTYLE -20

#define WS_EX_DLGMODALFRAME0x00000001
#define WS_MAXIMIZEBOX      0x00010000
#define WS_MINIMIZEBOX      0x00020000

#define SWP_NOSIZE       0x00000001
#define SWP_NOMOVE       0x00000002
#define SWP_NOZORDER     0x00000004
#define SWP_FRAMECHANGED 0x00000020

// システムメニューの変更
GetSystemMenu hWnd, FALSE
hSysMenu = stat
RemoveMenu hSysMenu, SC_MINIMIZE, FALSE
RemoveMenu hSysMenu, SC_MAXIMIZE, FALSE
RemoveMenu hSysMenu, SC_RESTORE , FALSE
RemoveMenu hSysMenu, SC_SIZE    , FALSE

// アイコン、最大化/最小化ボックスの非表示
GetWindowLong hWnd, GWL_EXSTYLE
SetWindowLong hWnd, GWL_EXSTYLE, stat | WS_EX_DLGMODALFRAME
GetWindowLong hWnd, GWL_STYLE
SetWindowLong hWnd, GWL_STYLE  , stat & ((WS_MAXIMIZEBOX | WS_MINIMIZEBOX) ^ 0xFFFFFFFF)

// アイコンなし
SetClassLong hWnd, GCL_HICON  , 0
SetClassLong hWnd, GCL_HICONSM, 0

// ウィンドウを再描画
SetWindowPos hWnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED

マクロばっかり使ってるけど、長いので、実際使うときは数値で書いちゃっていいかも。
問題解決してくれた方々に感謝。


「【HSP】閉じるボタンしかないウィンドウを作成【Win32API】」への5件のフィードバック

  1. 本当だ、「×」しかない^^!!
    なかなか滑稽なウィンドウですね。ひええ。
    でも需要ありそう、ツールウィンドウにすると「×」が小さいですし……

  2. ありがとうございます!!
    ゲームの設定画面や自前でダイアログのようなものを作るときに使えると思います。

  3. はじめまして。友達登録を申請させていただきました。
    プログラミングを勉強しはじめたばかりです。よろしくお願いします。HSPがわかりやすい言語とネットで言われていましたのでこちらと、ある事情からvisualC♯を勉強するつもりです。

  4. はじめまして。
    私は趣味でプログラミングをしているだけなので、お役に立てるかわかりませんが、こちらこそよろしくお願いします。

  5. HSPでダイアログ風のウインドウを作る時に
    syscolor 15:boxf:color
    の1行で背景をダイアログ風に出来ます。

コメントは受け付けていません。