原来用资源手动在对话框上创建了3个button
现在在 switch (message) { case WM_INITDIALOG:
pProjects = new Project;
strcpy(pProjects->szProjectName , "jian4");
pProjects->checkid =(int) ::CreateWindow("BUTTON",pProjects->szProjectName,WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON,80,80,100,100,hDlg,NULL,(HINSTANCE) GetWindowLong(hDlg, GWL_HINSTANCE),NULL); return true; case WM_CLOSE:
动态添加了一个button
但是这个button 不能点啊
其他的都可以用
怎么解决啊 ?
现在在 switch (message) { case WM_INITDIALOG:
pProjects = new Project;
strcpy(pProjects->szProjectName , "jian4");
pProjects->checkid =(int) ::CreateWindow("BUTTON",pProjects->szProjectName,WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON,80,80,100,100,hDlg,NULL,(HINSTANCE) GetWindowLong(hDlg, GWL_HINSTANCE),NULL); return true; case WM_CLOSE:
动态添加了一个button
但是这个button 不能点啊
其他的都可以用
怎么解决啊 ?
这是什么原因啊 ?
static BOOL SelectEditionMsg(HWND hDlg, UINT message, WPARAM wParam) {
switch (message) {
case WM_INITDIALOG:
pProjects = new Project;
strcpy(pProjects->szProjectName , "jian4");
pProjects->checkid =(int) ::CreateWindow("BUTTON",pProjects->szProjectName,WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON,80,80,100,100,hDlg,NULL,hInst,NULL); return true; case WM_CLOSE:
::SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
break;
case WM_COMMAND:
if ((wParam & 0xffff) == IDOK) {
if(::IsDlgButtonChecked(hDlg,pProjects->checkid))
{
int i = 100;
}
if (::IsDlgButtonChecked(hDlg,IDC_RADIO3))
{
strEditor = "j";
}
else if(::IsDlgButtonChecked(hDlg,IDC_RADIO2))
{
strEditor = "j";
}
else
strEditor = "; ::EndDialog(hDlg, IDOK); return TRUE;
} else if ((wParam & 0xffff) == IDCANCEL) {
::EndDialog(hDlg, IDCANCEL); return FALSE;
}
} return FALSE;
}BOOL CALLBACK SelectEditionDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { return SelectEditionMsg(hDlg, message, wParam);
}
static int C_SelectEdition(lua_State *L)
{
::DialogBoxParam((HINSTANCE)host->GetInstance(), (LPCSTR)MAKEINTRESOURCE(IDD_SELECT_EDITION), (HWND)host->GetMainWnd(),
reinterpret_cast<DLGPROC>(SelectEditionDlg), reinterpret_cast<sptr_t>(host));
return 0;
}
2.要想按钮能响应WM_COMMAND消息,需要在CreateWindow函数中倒数第三个参数指定为按钮的ID
示例代码:
#define ID_RADIO 100
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static HWND hRadio,hRadio1;
switch (message)
{
case WM_CREATE:
hRadio=CreateWindow(_T("Button"),_T("RADIO"),WS_CHILD|WS_VISIBLE|WS_BORDER|BS_AUTORADIOBUTTON,50,50,200,30,hWnd,(HMENU)ID_RADIO,hInst,NULL);
hRadio1=CreateWindow(_T("Button"),_T("RADIO"),WS_CHILD|WS_VISIBLE|WS_BORDER|BS_AUTORADIOBUTTON,50,100,200,30,hWnd,(HMENU)200,hInst,NULL);
break;
case WM_COMMAND:
if(LOWORD(wParam)==ID_RADIO)
{
if(::IsDlgButtonChecked(hWnd,ID_RADIO))
{
MessageBox(NULL,_T("单选按钮选中"),_T("消息"),MB_OK); }
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
你的这段代码:
case WM_COMMAND:
if ((wParam & 0xffff) == IDOK) {
表明了只有当OK按钮被单击时,你才会接受到WM_COMMAND消息,因此当动态添加的按钮被单击时,没有任何实际的代码被执行到