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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0107
Rich(豪華なソフトを作りたいという意)ツールバーをIE風メニューバーに変える6解決


Rich(豪華なソフトを作りたいという意)

リンク

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



この記事に返信する


Rich(豪華なソフトを作りたいという意)

リンク

2016/1/7(Thu) 02:10:14|NO.74033

誤字などがありました。

[誤]
//IEのメニューツールバーの使用と同じにした(スタイル、拡張スタイル、)

[正]
//IEのメニューツールバーの仕様と同じにした(スタイル、拡張スタイル、コントロール拡張スタイル)



Rich(豪華なソフトを作りたいという意)

リンク

2016/1/7(Thu) 18:45:36|NO.74043

画像で説明するならば、
 http://s1.gazo.cc/up/170619.png



774

リンク

2016/1/9(Sat) 19:33:12|NO.74074

カスタムドロー(NM_CustonDraw)で出来るとは思うのですが、
そうなると敢えてツールバーでやる必要は無いような気がします。

メニューでも同様にオーナードロー(WM_DrawItem)出来ますし
HSPの場合、いっそBgScrで作っちゃった方が楽かも知れません。

ついでにポップアップメニューもBgScr化しちゃえば色々遊べて愉しいですよ。



Rich(豪華なソフトを作りたいという意)

リンク

2016/1/10(Sun) 23:59:07|NO.74092

その手もありかもしれません。
でも、わがままかもしれませんが、レバーバンドにメニューバーを入れ込むので、
背景が透明でないと不恰好なので、
どうにかNMTBCUSTOMDRAWのサンプルをいただけないでしょうか。



774

リンク

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
描画自体はひどくおざなりです。

ツールバーやボタンのスタイルを工夫すれば
背景色やブラシ変更だけで済むかも知れませんが、そこまで調べる気は無いです。



Rich(豪華なソフトを作りたいという意)

リンク

2016/1/11(Mon) 23:43:59|NO.74102

自分のイメージとあっていました。
774さん、ありがとうございました。



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