私は、次の注文
#include <windows.h>
#include "resource.h"
IDD_ABOUT DIALOG DISCARDABLE 0, 0, 500, 106
BEGIN
DEFPUSHBUTTON "&OK", IDOK, 174, 18, 50, 14
RADIOBUTTON "Radio 1", ID_RADIOBUTTON1, 226, 18, 55, 14
END
私のCファイルはクリックすると、次の
#include <windows.h>
#include "resource.h"
BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch(Message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_RADIOBUTTON1:
{
MessageBox(hwnd, "RadioButton 1", "111", MB_OK);
SendMessage((HWND)lParam, (UINT) BM_SETCHECK, (WPARAM) BST_CHECKED,(LPARAM)NULL);
}
return TRUE;
break;
}
break;
default:
return FALSE;
}
return TRUE;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), NULL, AboutDlgProc);
}
が含まれているが含まれているリソースファイル(.RC)を持っていますダイアログボックスがコールバック関数を繰り返し開いた後のラジオボタンは、同じメッセージを受信します。このメッセージは、LOWORD(wParam)== ID_RADIOBUTTON1のWM_COMMANDです。しかし、SendMessageがMessageBoxの前に呼び出された場合、エラーは発生しません。これには特別な理由はありますか?
EDIT
しかし、私はprintfのとメッセージボックスの呼び出しを置き換えるならば、エラーは発生しませんし、動作が期待されると、出力の単一インスタンスのみが生産されるようです。
私はgccとwindresを使ってプログラムを作っています。
私のOSは、これを自動的に選択マークを設定します(代わりにRADIOBUTTON
の)のWindows Vista(TM)Home Premiumは、32ビットのサービスパック2
あなたはセミコロンが欠落している – stackptr
申し訳ありませんが...私はそれが – user2419083
悪いそれをテストせずにマイル離れ半分から編集:BM_SETCHECKはBN_CLICK通知を生成します。これはWM_COMMAND通知でラップされます。 SendMessageコールを移動すると、UIスレッドで100%コアを焼くか、メッセージボックスでいっぱいの画面を取得するかを選択できます。ラジオボタン*がチェックされる必要があるときにBM_SETCHECKを送るだけでループを解除してください。そんな感じ。 –