|
 |
|
2016/1/7(Thu) 01:57:02|NO.74032
IEのメニューバーにはツールバーを使っているようですが、
それを再現しようとしても(ホット状態になったらボタン背景が青になるアレ等)、
仕方がわかりません。どなたかお願いします。
#include "user32.as"
//メニューツールバー
pos 0,0:winobj "ToolbarWindow32","",0x80,0x5600D94D,ginfo(12)
hToolBar = objinfo(stat,2)
//IEのメニューツールバーの使用と同じにした(スタイル、拡張スタイル、)
sendmsg hToolBar,0x041E,20,0//TB_BUTTONSTRUCTSIZE
sendmsg hToolBar,0x0454,0,0x0081//TB_SETEXTENDEDSTYLE
sendmsg hToolBar,0x0420,0,1 | ( 14 << 16 )//余白を作る(アイコン表示領域を利用する)
//メニュー文字列
Text="ファイル(&F)","編集(&E)","検索(&S)","挿入(&I)","ツール(&T)","表示(&V)","ヘルプ(&H)"
repeat length(Text)
TBB = -1,cnt,((0x16)<<8)|0x04,0,varptr(Text(cnt))
sendmsg hToolBar,0x0414,1,varptr(TBB)//TB_ADDBUTTONS
loop
CreatePopupMenu : hMenu=stat//とりあえずファイルメニューだけ
AppendMenu hMenu,0,0,"新規(&N)"
AppendMenu hMenu,0,0,"開く(&O)"
AppendMenu hMenu,0,0,"保存(&S)"
AppendMenu hMenu,0x800,0,""
AppendMenu hMenu,0,0,"終了(&Q)"
onexit *exit
oncmd gosub *OnCommand,0x0111//WM_COMMAND
stop
*OnCommand
if lparam == hToolBar{
itemID = wParam & 0xFFFF
dim rc,4
sendmsg hToolBar,0x433,itemID,varptr(rc)
pt = rc(0),rc(3)
ClientToScreen hToolBar, varptr(pt)
sendmsg hToolBar,0x0402,itemID,1//選択状態にする(無くても問題無し)
if itemID=0:TrackPopupMenuEx hMenu, 0, pt(0), pt(1), hwnd, 0
sendmsg hToolBar,0x0402,itemID,0//選択状態にしない
}
return
*exit
DestroyMenu hMenu//メニューを削除
end

| |
|
2016/1/7(Thu) 02:10:14|NO.74033
誤字などがありました。
[誤]
//IEのメニューツールバーの使用と同じにした(スタイル、拡張スタイル、)
[正]
//IEのメニューツールバーの仕様と同じにした(スタイル、拡張スタイル、コントロール拡張スタイル)
|
|
2016/1/7(Thu) 18:45:36|NO.74043
|
|
2016/1/9(Sat) 19:33:12|NO.74074
カスタムドロー(NM_CustonDraw)で出来るとは思うのですが、
そうなると敢えてツールバーでやる必要は無いような気がします。
メニューでも同様にオーナードロー(WM_DrawItem)出来ますし
HSPの場合、いっそBgScrで作っちゃった方が楽かも知れません。
ついでにポップアップメニューもBgScr化しちゃえば色々遊べて愉しいですよ。
|
|
2016/1/10(Sun) 23:59:07|NO.74092
その手もありかもしれません。
でも、わがままかもしれませんが、レバーバンドにメニューバーを入れ込むので、
背景が透明でないと不恰好なので、
どうにかNMTBCUSTOMDRAWのサンプルをいただけないでしょうか。
|
|
2016/1/11(Mon) 19:36:30|NO.74098
#include "user32.as"
//メニューツールバー
pos 0,0:winobj "ToolbarWindow32","",0x80,0x5600D94D|0x2000,ginfo(12) //<-- 変更箇所@スタイル追加
hToolBar = objinfo(stat,2)
//IEのメニューツールバーの使用と同じにした(スタイル、拡張スタイル、)
sendmsg hToolBar,0x041E,20,0//TB_BUTTONSTRUCTSIZE
sendmsg hToolBar,0x0454,0,0x0081//TB_SETEXTENDEDSTYLE
sendmsg hToolBar,0x0420,0,1 | ( 14 << 16 )//余白を作る(アイコン表示領域を利用する)
//メニュー文字列
Text="ファイル(&F)","編集(&E)","検索(&S)","挿入(&I)","ツール(&T)","表示(&V)","ヘルプ(&H)"
repeat length(Text)
TBB = -1,cnt,((0x16)<<8)|0x04,0,varptr(Text(cnt))
sendmsg hToolBar,0x0414,1,varptr(TBB)//TB_ADDBUTTONS
loop
CreatePopupMenu : hMenu=stat//とりあえずファイルメニューだけ
AppendMenu hMenu,0,0,"新規(&N)"
AppendMenu hMenu,0,0,"開く(&O)"
AppendMenu hMenu,0,0,"保存(&S)"
AppendMenu hMenu,0x800,0,""
AppendMenu hMenu,0,0,"終了(&Q)"
onexit *exit
oncmd gosub *OnCommand,0x0111//WM_COMMAND
oncmd gosub *OnCustomDraw,0x004E//WM_NOTIFY //<-- 追加箇所
stop
*OnCommand
if lparam == hToolBar{
itemID = wParam & 0xFFFF
dim rc,4
sendmsg hToolBar,0x433,itemID,varptr(rc)
pt = rc(0),rc(3)
ClientToScreen hToolBar, varptr(pt)
sendmsg hToolBar,0x0402,itemID,1//選択状態にする(無くても問題無し)
if itemID=0:TrackPopupMenuEx hMenu, 0, pt(0), pt(1), hwnd, 0
sendmsg hToolBar,0x0402,itemID,0//選択状態にしない
}
return
*OnCustomDraw //<-- 追加箇所@カスタムドローな部分
dupptr hdr,lparam,12,4
if hdr(0) == hToolBar && hdr(2) == -12{ //WM_NOTIFY -> NM_CUSTOMDRAW @ToolBar
dupptr nmtbcd,lparam+12,24*4,4 ;NMTBCUSTOMDRAWのdwDrawStage以降
if nmtbcd(0) == 1 : return 0x20 ;CDDS_PREPAINT >> CDRF_NOTIFYITEMDRAW
if nmtbcd(0) == 0x10001{ ;CDDS_ITEMPREPAINT
if nmtbcd(7) & 0x48{ ;uItemState & (CDIS_HOT|CDIS_CHECKED)
mref bmscr,67 : tmp = bmscr(4) : bmscr(4) = nmtbcd(1)
syscolor 13 : boxf nmtbcd(2),nmtbcd(3),nmtbcd(4)-1,nmtbcd(5)-1
syscolor 14 : pos nmtbcd(2)+1,nmtbcd(3)+1 : mes "hot"
bmscr(4) = tmp
return 0x04 ;>> CDRF_SKIPDEFAULT (局所的なオーナードロー?
}
}
return 0x00 ;>> CDRF_DODEFAULT (他は通常描画
}
return
*exit
DestroyMenu hMenu//メニューを削除
end
描画自体はひどくおざなりです。
ツールバーやボタンのスタイルを工夫すれば
背景色やブラシ変更だけで済むかも知れませんが、そこまで調べる気は無いです。

| |
|
2016/1/11(Mon) 23:43:59|NO.74102
自分のイメージとあっていました。
774さん、ありがとうございました。
|
|