Windows でカスタム ボタン タイトルを使用してアラートを表示しますか?
-
19-09-2019 - |
質問
CoreFoundation を使用すると、次のようなアラート ダイアログを表示できます。
CFUserNotificationDisplayAlert(0.0,
kCFUserNotificationPlainAlertLevel,
NULL, NULL, NULL,
CFSTR("Alert title"),
CFSTR("Yes?),
CFSTR("Affirmative"),
CFSTR("Nah"),
NULL, NULL);
Windows C API を使用してこれを複製するにはどうすればよいですか?私が得た最も近いものは次のとおりです。
MessageBox(NULL, "Yes?", "Alert title", MB_OKCANCEL);
しかし、これはボタンのタイトルとして「OK」と「キャンセル」をハードコードするものであり、これは私が望むものではありません。これを回避する方法、または使用できる代替関数はありますか?
解決
あなたはボタンの凡例を変更するためにSetWindowText関数を使用することができます。メッセージボックス()ブロック実行の流れなので、あなたはこのラウンドを取得するためにいくつかのメカニズムを必要とする - 以下のコードは、タイマーを使用しています。
。私は(のFindWindowのコードがメッセージボックスには親でないに依存してもよいと思います)が、私はよく分からない。
int CustomMessageBox(HWND hwnd, const char * szText, const char * szCaption, int nButtons)
{
SetTimer( NULL, 123, 0, TimerProc );
return MessageBox( hwnd, szText, szCaption, nButtons );
}
VOID CALLBACK TimerProc(
HWND hwnd,
UINT uMsg,
UINT_PTR idEvent,
DWORD dwTime
)
{
KillTimer( hwnd, idEvent );
HWND hwndAlert;
hwndAlert = FindWindow( NULL, "Alert title" );
HWND hwndButton;
hwndButton = GetWindow( hwndAlert, GW_CHILD );
do
{
char szBuffer[512];
GetWindowText( hwndButton, szBuffer, sizeof szBuffer );
if ( strcmp( szBuffer, "OK" ) == 0 )
{
SetWindowText( hwndButton, "Affirmative" );
}
else if ( strcmp( szBuffer, "Cancel" ) == 0 )
{
SetWindowText( hwndButton, "Hah" );
}
} while ( (hwndButton = GetWindow( hwndButton, GW_HWNDNEXT )) != NULL );
}
他のヒント
あなたは上記のWindows Vistaとに自分自身を結びつけるために喜んでいる場合は、
は、「<のhref =」http://msdn.microsoft.com/en-us/library/bb760540(VS.85を検討する必要があります) "のrel = "nofollowをnoreferrer"> TaskDialog の" 機能を.aspxの。私はそれはあなたがやりたいんできるようになると信じています。
所属していません StackOverflow