怎么使 动态创建的radiobutton 有效 急急!!!!

panhui130 2009-07-22 03:01:51
原来用资源手动在对话框上创建了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 不能点啊
其他的都可以用
怎么解决啊 ?
...全文
321 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
paerxiushi 2009-07-23
  • 打赏
  • 举报
回复
1。要想使单选按钮能被选中,需要指定风格 BS_AUTORADIOBUTTON
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消息,因此当动态添加的按钮被单击时,没有任何实际的代码被执行到
FutureX 2009-07-23
  • 打赏
  • 举报
回复
记号
bigriverhorse 2009-07-22
  • 打赏
  • 举报
回复
楼主,你没有写响应消息,就用BS_AUTORADIOBUTTON样式吧,至少保证是可以点击的。

pProjects->checkid =(int) ::CreateWindow("BUTTON",pProjects->szProjectName,WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,80,80,100,100,hDlg,NULL,(HINSTANCE) GetWindowLong(hDlg, GWL_HINSTANCE),NULL);
枫桦沐阳 2009-07-22
  • 打赏
  • 举报
回复
这里可以用CreateWindow么?

没这么用过,说一下自己的想法。

这样的话创建一个窗口,有自己的消息处理函数,你不控制的话不会给主窗口发送on_command消息吧?

可以试一下申请一个新CButton类,然后把窗口attach给他,然后给他设个ID。。

用CButton.create不可以么?

实在不行CreateCtronl也可以啊,不过还得自己attach窗口.

panhui130 2009-07-22
  • 打赏
  • 举报
回复
创建时成功的 就是 点它的时候 没有用
zhoujianhei 2009-07-22
  • 打赏
  • 举报
回复
S_RADIOBUTTON,80,80,100,100,hDlg,(HMENU)IDC_XXX,hInst,NULL);

似乎要指定ID。
panhui130 2009-07-22
  • 打赏
  • 举报
回复
怎么添加啊 它是相应什么消息的哦 可以给我改下上面的代码么 ?
谢谢
danxuezx 2009-07-22
  • 打赏
  • 举报
回复
给你自己创建的那个添加相应的消息,然后进行响应。
panhui130 2009-07-22
  • 打赏
  • 举报
回复
动态创建的 不是响应wm_command消息吗?
panhui130 2009-07-22
  • 打赏
  • 举报
回复
我的代码是这样的 IDC_RADIO2 是手动添加的 可以响应消息 可以点 有效 可是 动态建立的那个就不可以
这是什么原因啊 ?
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;
}
danxuezx 2009-07-22
  • 打赏
  • 举报
回复
响应消息,在消息响应函数里进行设置。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧