HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0507
閉じるボタン「×」だけウィンドウ・左上のアイコンを消す・変更が反映されない3解決


リンク

2013/5/7(Tue) 23:03:19|NO.53891

閉じるボタン「×」だけのあるウィンドウが作成したくて、Win32APIのサンプルを探し、
HSP用に自分なりにプログラムを書いてみたのですが、思い通りに動作しません。
(参考にしたプログラムはCreateWindowExで作成していた)


#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_DLGMODALFRAME 0x00000001 #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 // アイコンなし SetClassLong hWnd, GCL_HICON , 0 SetClassLong hWnd, GCL_HICONSM, 0 // アイコン、最大化/最小化ボックスの非表示 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) // ウィンドウを再描画 (SetWindowPosだと一部反映されない?) SetWindowPos hWnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED

最後のSetWindowPosで、最大化最小化ボタンの表示はちゃんと反映される (消える) のですが、
左上のアイコンだけ反映されません (消えてくれません) 。
Windows 7 64bit のAeroでは、gsel 0,-1 : gsel 0,1 で反映されたのですが、ベーシックだとだめでした。
他にちゃんとした方法があるのでしょうか…?



この記事に返信する


inovia

リンク

2013/5/7(Tue) 23:33:39|NO.53895

順番を入れ替えてみたところ、Aero/ベーシック環境でも反映されました。


// アイコン、最大化/最小化ボックスの非表示 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



ツノン

リンク

2013/5/8(Wed) 09:44:22|NO.53906

少し検証してみた
どうやら 拡張Styleに WS_EX_DLGMODALFRAME が指定されていない場合に 一度でも SetClassLong GCL_HICON に Null を指定すると SetWindowPos の SWP_FRAMECHANGED を 使用した際に IDI_APPLICATION のアイコンが代用される仕組みらしい。

#include "user32.as" #define GCL_HICON -14 #define GCL_HICONSM -34 mes "-- WS_EX_DLGMODALFRAME が無い場合 --" SetClassLong hWnd, GCL_HICON , 0 mes stat SetClassLong hWnd, GCL_HICONSM, 0 mes stat SetWindowLong hWnd, $FFFFFFEC/*GWL_EXSTYLE*/, $00000001/*WS_EX_DLGMODALFRAME*/ SetWindowLong hwnd,$FFFFFFF0/*GWL_STYLE*/,$10c80000/*WS_CAPTION|WS_VISIBLE|WS_SYSMENU|WS_OVERLAPPED*/ mes "-- WS_EX_DLGMODALFRAME が有る場合 --" SetClassLong hWnd, GCL_HICON , 0 mes stat SetClassLong hWnd, GCL_HICONSM, 0 mes stat SetWindowPos hwnd,0,0,0,0,0,$00000027/*SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED*/



リンク

2013/5/9(Thu) 16:33:25|NO.53921

>>inoviaさん
おお!!動きましたありがございます!!すっごい感謝です!!
順番を入れ替えればよかったとは…。気が付かなかった…。

>>ツノンさん
おお、そうだったのですか!!
検証ありがとうございます!返り値ちゃんと調べとけばよかった〜

解決しました!みなさんありがとうございました!



ONION software Copyright 1997-2023(c) All rights reserved.