ich eine Ressource-Datei (RC), die die folgendenOrder of win32api Funktionen Callback-Funktion verursacht die gleiche Nachricht erhalten
#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
Meine C-Datei enthält enthält folgende
#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);
}
Nach einem Klick Der Radio-Button einmal nach dem Öffnen des Dialogfelds hat die Rückruffunktion wiederholt die gleiche Nachricht, die ein WM_COMMAND mit dem LOWORD (wParam) == ID_RADIOBUTTON1 ist. Aber wenn SendMessage vor MessageBox aufgerufen wird, tritt der Fehler nicht auf. Gibt es einen bestimmten Grund dafür?
EDIT
Aber wenn ich den Anruf ersetzen mit printf MessageBox dann tritt der Fehler nicht passieren und das Verhalten ist wie erwartet, und nur eine einzige Instanz Ausgang erzeugt wird.
Ich benutze gcc und windres, um das Programm zu machen.
Mein Betriebssystem ist Windows Vista (tm) Home Premium 32-Bit Service Pack 2
Sie verpassen ein Semikolon – stackptr
Sorry ... ich es bearbeitet schlecht – user2419083
Von halbe Meile entfernt, ohne es zu testen: BM_SETCHECK eine BN_CLICK Meldung generieren. Welches ist in eine WM_COMMAND-Benachrichtigung verpackt. Wenn Sie also den SendMessage-Aufruf verschieben, können Sie wählen, ob Sie 100% des Kerns im Benutzeroberflächenthread brennen oder einen Bildschirm mit Nachrichtenfeldern füllen möchten. Brechen Sie die Schleife, indem Sie nur BM_SETCHECK senden, wenn der Radiobutton * * überprüft werden muss. So ähnlich. –