掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
変更前の解像度が取得されてしまう。 (ID:102545)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
変更前の解像度が取得されてしまう。 (OS WINXP) よろしくお願いいたします。 画面の解像度が変更された場合に、それに応じてウインドウの位置を変えるようにしたいと思いまして、 いろいろ検索して調べました。 その結果、プログラムをサブクラス化して「WM_DISPLAYCHANGE」というウインドウメッセージをフックすればいいということが分かったのですが、 このメッセージは解像度が変化する直前に送られてくるようなのです。 なので取得できる解像度は、変化する前のものとなってしまいました。 どうすれば、変化した後の解像度を知ることができるでしょうか? どうかよろしくお願いいたします。 (下は私が実行したプログラムを要約したものです。) フォームにテキストボックスを一つ貼り付けて、 '****Form1**** Private Sub Form_Load() SubClass End Sub Private Sub Form_Unload(Cancel As Integer) UnSubClass End Sub Private Sub SubClass() m_wndprcNext = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Private Sub UnSubClass() SetWindowLong hwnd, GWL_WNDPROC, m_wndprcNext End Sub '****Module1**** Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal wndrpcPrev As Long, ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const GWL_WNDPROC = -4 Public m_wndprcNext As Long Public Const WM_DISPLAYCHANGE = &H7E Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case uMsg Case WM_DISPLAYCHANGE TWidth% = Screen.Width \ Screen.TwipsPerPixelX THeight% = Screen.Height \ Screen.TwipsPerPixelY Form1.Text1.Text = CStr(TWidth%) & "*" & CStr(THeight%) End Select WindowProc = CallWindowProc _ (m_wndprcNext, hwnd, uMsg, wParam, ByVal lParam) End Function
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.