こちらにもCStandardWindowを導入・・・。
で、
こんな感じで変わらない・・・。
とりあえずメニュー付きのウィンドウを標準的なウィンドウとしてCStandardWindowにまとめる・・・。
StandardWindow.hを追加して、
CMenuWindowから、nID付きのRegisterClass、コンストラクタ、Create、OnCreateだけ引き継ぐ・・・。
RegisterClassでクラス名に"StandardWindow"を指定・・・。
今回はメニューのIDも指定するので、OnCreateはCMenuBarオブジェクトの作成だけにする・・・。
Createでクラス名に"StandardWindow"を指定して生成・・・。
MenuWindow.hでRegisterClassをIDなしとID付きの2種類に分ける・・・。
MenuWindow.cppで、
こんな感じ・・・。
また、
最後の戻り値を間違えてたので、FALSEに修正・・・。
で、StandardApplication.cppで、
CMenuWindowからCStandardWindowに・・・。
これで、
こうなる・・・。
こちらもメニューアイテムが選択された時の処理を実装・・・。
例えば、アプリケーションの終了を選択すると、
"アプリケーションの終了"というメッセージボックスが表示される・・・。
・メニューアイテムが選択された時の処理 · bg1bgst333/ObjeqtNote@26143c9 · GitHub
これまでメニューアイテムを押しても、反応しないようにしていた・・・。
アイテムが選択された時の処理を実装する・・・。
MenuBar.hは、
それぞれのメニューアイテムが選択された時のハンドラを追加・・・。
MenuBar.cppは、
OnCommandMenuItemで、IDごとにswitch-case文で振り分け・・・。
各ハンドラはメッセージボックス出すだけ・・・。
MenuWindow.cppは、
メニューが選択された時は、HIWORD(wParam)が0になるので、m_pMenuBar->OnCommandMenuItemにwParam, lParamを渡して呼び出す・・・。
で、CMenuBarの方に任せるという形・・・。
"新規"を選択すると、
このように"新規"とメッセージボックスが出て、他のアイテムも同様にメッセージボックスが出る・・・。
ObjeqtNoteも動的メニュー対応・・・。
Aoiとやってることは同じ・・・。
(もうめんどいから同じ場合はコード載せない・・・。)
・メニューの設置(動的に作成する場合) · bg1bgst333/ObjeqtNote@5e2b956 · GitHub
#5では、ウィンドウクラスに静的にメニューリソースを指定していた・・・。
今回は動的にメニューを作成して、ウィンドウに設置したい場合・・・。
MenuBar.hを追加し、
メニューハンドルと、設置するウィンドウハンドルをもつメニューバーオブジェクトを定義・・・。
LoadMenu、SetMenuなどの設置に使う関数、メニューが選択された時の独自ハンドラOnCommandMenuItem・・・。
MenuBar.cppは、それぞれ、LoadMenu、SetMenuを呼べるように・・・。
LoadMenuは以前作った時とは引数を変えている・・・。
OnCommandMenuItemは今回は使わない・・・。
MenuWindow.hには、CMenuBarオブジェクトm_pMenuBarや、デストラクタ、OnCreate、OnCommandを追加・・・。
メニュー指定のRegisterClassはコメントアウトして、
デストラクタで解放、
OnCreateでメニューのロードとセット・・・。
OnCommandはまだ使わない・・・。
Window.hに大元のOnCommandを追加・・・。
CMenuWindowのは、これのオーバーライド・・・。
なにもしない・・・。
WM_COMMANDでOnCommand・・・。
三項演算子で、TRUEだと0を返すようにしている・・・。
これでもメニューでた・・・。
次は、URLバーとWebページをロードするNavigateボタンを設置する・・・。
activity_main.xmlは、
まず、中に横方向のLinearLayoutを追加・・・。
urlBarはlayout_weight="1"、navigateButtonはlayout_width="wrap_content"として、navigateButtonの左にurlBarが埋まるように・・・。
このLinearLayout自体は、layout_height="wrap_content"・・・。
navigateButton_textは"Navigate"・・・。
こちらのLinearLayoutではlayout_weight="1"なので、urlBarとnavigateButtonを含む上のLinearLayout以外の下の部分を埋める・・・。
そこいっぱいにWebViewが広がる・・・。
MainActivity.javaは、
View.OnClickListenerを実装・・・。
onCreateでは、navigateButtonを取得し、setOnClickListenerにthisを指定・・・。
onClickをオーバーライド、idがnavigateButtonならurlBarを取得し、そこから入力したurlを取得・・・。
webViewも取得して、loadUrlでurlをロード・・・。
URLバーにURLを入れる・・・。
これでNavigateボタンを押すと、
こんな感じでロードされる・・・。
バックキーでソフトウェアキーボードを閉じるとこんな感じ・・・。