投稿時間:2005/11/16(Wed) 13:51 投稿者名:GOD
Eメール:
URL :
タイトル:ステータスバーの文字列を取得
ステータスバーの文字列の色を変更したく、WM_PAINT時に自分で描画しようとしています。 そこでウィンドウハンドルからステータスバーの文字列を取得したいのですが、正しく取得できま せん。 現状、問題点は2つあります。 1)StatusBar1.Panelsで設定した文字列を取得できない。 2)SB_SETTEXTで文字列を設定すると一時的に文字列を取得できるが、ウィンドウサイズを変更す ると文字列が取得できなくなる。 上記問題点はオーナードローとは関係なく普通に行っても同様の現象が出てしまいます。 自分で文字列を描画する時は、コントロールの持っている文字列(Panelsで設定した文字列)は取得 できないものなのでしょうか。 現在、回避法としてステータスバーオブジェクトをグローバル変数に退避するくらいしか思いつか ないのですが他に良い方法はありませんでしょうか。問題点の1が解決してくれるのが一番いいの ですが...
環境:Win2000+SP4, IE6+SP1, VB6+SP5
サンプル: Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Const WM_USER As Long = &H400 Private Const SB_SETTEXTA As Long = (WM_USER + 1) Private Const SB_GETTEXTA As Long = (WM_USER + 2) Private Const SB_GETTEXTLENGTHA As Long = (WM_USER + 3)
'文字設定ボタン Private Sub Command1_Click() Dim strText As String
strText = StrConv("Test", vbFromUnicode) '文字列設定 Call SendMessage(StatusBar1.hwnd, SB_SETTEXTA, 0, ByVal StrPtr(strText)) End Sub
'文字取得ボタン Private Sub Command2_Click() Dim strText As String Dim lngLen As Long
'文字数取得 lngLen = SendMessage(StatusBar1.hwnd, SB_GETTEXTLENGTHA, 0, 0) And &HFFFF& If lngLen = 0 Then Debug.Print "文字列なし" Exit Sub End If strText = String(lngLen, vbNullChar) '文字列取得 Call SendMessage(StatusBar1.hwnd, SB_GETTEXTA, 0, ByVal StrPtr(strText)) strText = StrConv(strText, vbUnicode) strText = Left(strText, InStr(1, strText, vbNullChar) - 1) Debug.Print strText End Sub
'文字設定2ボタン Private Sub Command3_Click() StatusBar1.Panels(1).Text = "Test" End Sub
問題点1の再現法: 1)Command3押下 2)Command2押下 → 文字列が取得できない
問題点2の再現法: 1)Command1押下 2)Command2押下 → 文字列が取得できる 3)Windowサイズを変更 4)Command2押下 → 文字列が取得できない
|