ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 01:15

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 

役に立ちましたか?
はい、役に立ちました。
いいえ、全く役に立ちません
1 個までオプションを選択できます

投票結果を見る
作成者 メッセージ
投稿記事Posted: 2006年2月19日(日) 02:22 
オフライン

登録日時: 2005年11月13日(日) 15:25
記事: 25
タイトルバーなどを右クリックすると出てくるメニューに追加できます。
プロンプトウィンドウに追加してもどうやってメッセージを拾うのかがわからないorz


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年2月20日(月) 01:46 
>プロンプトウィンドウに追加してもどうやってメッセージを拾うのかがわからないorz

サブクラス化するのが手っ取り早いでしょうね。
グローバル変数ではなくウィンドウのGWL_USERDATAを使ったサブクラス化のサンプルにしてみました。

#promptディレクティブを呼び出す前あたりに
コード:
'元のウィンドウ関数アドレスの取得
Const GetOldProcAddr(hWnd) = GetWindowLong(hWnd, GWL_USERDATA)
'CallWindowProc関数を使って元のウィンドウ関数を呼び出す
Const CallOldWindowProc(hWnd, Msg, wParam, lParam) = _
  CallWindowProc(GetOldProcAddr(hWnd), hWnd, dwMsg, wParam, lParam)
 
Function SubClassProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
  SubClassProc = 0
  Select Case dwMsg
    Case WM_SYSCOMMAND
      Select Case LOWORD(wParam)
        Case IDM_MENU1
          MsgBox hWnd, "メニュー1が選択されました"
        Case IDM_MENU2
          MsgBox hWnd, "メニュー2が選択されました"
        Case IDM_MENU3
          MsgBox hWnd, "メニュー3が選択されました"
        Case Else
          SubClassProc = CallOldWindowProc(hWnd, dwMsg, wParam, lParam)
      End Select
    Case WM_DESTROY
      'サブクラス化解除
      SetWindowLong(hWnd, GWL_WNDPROC, GetOldProcAddr(hWnd))
    Case Else
      SubClassProc = CallOldWindowProc(hWnd, dwMsg, wParam, lParam)
  End Select
End Function
とコードを追加して、さらにシステムメニューを追加した後に
コード:
'サブクラス化開始
SetWindowLong(_PromptSys_hWnd, GWL_USERDATA, SetWindowLong(_PromptSys_hWnd, _
  GWL_WNDPROC, AddressOf(SubClassProc)))
とすれば、追加したシステムメニューに合わせたイベントが追加できます。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 2 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[11人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean