3

Visual C ++ /WindowsAPIで簡単なGUIアプリケーションを作成しています。リソースで次のように定義されたダイアログボックスにトラックバーコントロールがあります。

CONTROL "",IDC_SLIDER1045,"msctls_trackbar32",0x50010000,23,52,141,16,0x00000000

静的テキストコントロールにトラックバーの値を表示したいので、次のように書きました。

case WM_NOTIFY:
if(lParam == TRBN_THUMBPOSCHANGING)
{
    Pos1 = SendMessage(GetDlgItem(hwndDlg, 1045), TBM_GETPOS, 0, 0);

    wsprintf(szPos1, "Change IP address every %d minutes", Pos1);

    SetDlgItemText(hwndDlg, 1044, szPos1);
}
break;

私も試しました:

case WM_NOTIFY:
    Pos1 = SendMessage(GetDlgItem(hwndDlg, 1045), TBM_GETPOS, 0, 0);

    wsprintf(szPos1, "Change IP address every %d minutes", Pos1);

    SetDlgItemText(hwndDlg, 1044, szPos1);
break;

どちらのコードも機能しません。最初はアクションを実行せず、2番目はアプリケーションをハングさせます。

私の質問は、トラックバーの値を取得して、静的テキストコントロールにリアルタイムで表示する方法です。

4

4 に答える 4

4

トラックバーのSDKドキュメントを必ずお読みください。「トラックバー通知メッセージ」というタイトルのセクションでは、コントロールが位置をどのように通知するかを説明しています。

WM_HSCROLLまたはWM_VSCROLLメッセージをリッスンする必要があることを文書化する方法に注意してください。

于 2012-12-09T16:21:29.110 に答える
2

あなたのコードには何が1045ありますか?1044おそらくIDC_SLIDER1045、静的制御リソースIDを意味します。必要に応じresource.hて、ソースファイルにインクルードします。

于 2012-12-09T14:49:20.007 に答える
2

他の回答が指摘しているように、適切なコントロールスタイルが設定されている場合、トラックバーコントロールは従来のWM_HSCROLLおよびWM_VSCROLL通知メッセージを送信します。ただし、これらの通知は16ビット範囲のみをサポートします。Windows Vista以降、APIには新しいWM_NOTIFYベースの通知TRBN_THUMBPOSCHANGINGが含まれています。この通知は、付随する構造体NMTRBTHUMBPOSCHANGINGで32ビットの位置データを送信します。

于 2013-03-08T19:50:44.937 に答える
1

質問を解決しました。

解決策が必要な他の人のために:

MSDNから:

トラックバーは、親にWM_HSCROLLまたはWM_VSCROLLメッセージを送信することにより、親ウィンドウにユーザーアクションを通知します。TBS_HORZスタイルのトラックバーは、WM_HSCROLLメッセージを送信します。TBS_VERTスタイルのトラックバーは、WM_VSCROLLメッセージを送信します。

コード:

case WM_HSCROLL:
    Pos1 = SendMessage(GetDlgItem(hwndDlg, IDC_SLIDER1045), TBM_GETPOS, 0, 0);

    wsprintf(szPos1, "Change IP address every %d minutes", Pos1);

    SetDlgItemText(hwndDlg, IDC_CHECKBOX1044, szPos1);
break;
于 2012-12-09T16:54:00.437 に答える