Erebus_22 Ответов: 1

Как создать и обработать нажатия на кнопку радио сообщения Windows на языке C++.ч


Я хочу создать меню переключателей, но не знаю, как обрабатывать сообщения, код, который я пробовал, не отображает меню. Пожалуйста, помогите мне, заранее спасибо

<pre lang="c++">
#include <windows.h>

 LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );

static char *title = TEXT("Check Box");

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
					LPSTR lpCmdLine, int nCmdShow )
{
  MSG  msg ;    
  WNDCLASS wc = {0};
  wc.lpszClassName = TEXT( "Check Box" );
  wc.hInstance     = hInstance ;
  wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
  wc.lpfnWndProc   = WndProc ;
  wc.hCursor       = LoadCursor(0, IDC_ARROW);

  
  RegisterClass(&wc);
  CreateWindow( wc.lpszClassName, title,
                WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                150, 150, 230, 150, 0, 0, hInstance, 0);  

  while( GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return (int) msg.wParam;
}

 LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{

 switch(msg)  
 {
  case WM_CREATE:
  {
    CreateWindow(TEXT("button"), TEXT("&Red"),
                WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON|WS_GROUP ,
                20, 155, 100, 30, hwnd, (HMENU) 1, ((LPCREATESTRUCT)lParam)->hInstance, NULL);

CreateWindow(TEXT("button"), TEXT("&Red"),
                WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
                20, 155, 100, 30,hwnd, (HMENU) 1, ((LPCREATESTRUCT)lParam)->hInstance, NULL);

CreateWindow(TEXT("button"), TEXT("&Red"),
                WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
                20, 155, 100, 30, hwnd, (HMENU) 1, ((LPCREATESTRUCT)lParam)->hInstance, NULL);

    break;
  }
return DefWindowProc(hwnd, msg, wParam, lParam);
 }
}


Что я уже пробовал:

Попробовал добавить опцию Group в createwindow, но это не помогает

1 Ответов

Рейтинг:
12

jeron1

Похоже, вы не вызываете ShowWindow () и UpdateWindow (), которые требуют, чтобы вы получили дескриптор созданного окна (возвращаемое значение из CreateWindow ()), может быть, взгляните на этот[^] ссылка.


Erebus_22

Да, но основной случай-это обработка командного случая, как это сделать для переключателя, как узнать, требуется ли изменение выбора

jeron1

Я не понимаю, переключатель-это окно внутри родительского окна, вы можете вызывать методы windows на переключателе. Не уверен, что вы имеете в виду под "изменением выбора".

Erebus_22

Как только пользователь нажимает переключатель, как я могу узнать, какая кнопка нажата?
Какой код я использую для этого

jeron1

Может быть, взгляните на эту нить.
http://stackoverflow.com/questions/37271194/wm-command-catch-button-press-in-c-win32