请教如何写一个单选按钮组的总的WindowPro()统一处理所有按钮的消息。up有分,不够再补!谢谢!!

马鸣风萧萧 2003-04-06 08:17:54
我在对话框上放了一组单选按钮,并建立了一个对象指针数组给这组按钮编号。可是我不想一一对每个按钮都进行消息映射。我想建立一个总的windowpro()消息过程处理函数对这组按钮的单击消息进行统一处理,并在windowpro()中识别是哪个按钮的消息。请问这个windowpro该如何写?不用窗口子类化能行吗?我对窗口子类化不太理解。先谢了!!!
...全文
32 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
马鸣风萧萧 2003-04-08
  • 打赏
  • 举报
回复
: JennyVenus()
我试过了,便已能通过,可是执行出现问题。
afx_msg void OnFunction(UINT nID);
ON_COMMAND_RANGE(ID_FIRST,ID_LAST,OnFunction)
以上的代码能直接拿来用吗?能不能讲的详细点?还有 m_lbl[ 2 ].SubclassDlgItem( IDC_STATIC3, this );
是什么意思?


: webber84(***闭关修炼中***)
你的方法我试过了,可以的,谢谢!
GoogleGeek 2003-04-07
  • 打赏
  • 举报
回复
还有更简单的方法!
你可以实现像vb里面的控件数组那样的机制,只要你够OOP!!
写程序只要适当的变动一下就行了!
用户 昵称 2003-04-07
  • 打赏
  • 举报
回复
你可以用GetFocus和GetCtrlID来判断
也可以先声明数组,然后用
m_lbl[ 0 ].SubclassDlgItem( IDC_STATIC1, this );
m_lbl[ 1 ].SubclassDlgItem( IDC_STATIC2, this );
m_lbl[ 2 ].SubclassDlgItem( IDC_STATIC3, this );
还可以用
afx_msg void OnFunction(UINT nID);
ON_COMMAND_RANGE(ID_FIRST,ID_LAST,OnFunction)
马鸣风萧萧 2003-04-06
  • 打赏
  • 举报
回复
: webber84(***闭关修炼中***)
谢谢,现在太晚了,我明天试试看。谢谢!!
webber84 2003-04-06
  • 打赏
  • 举报
回复
如果你只是想处理按键的话就比较简单了:
BOOL CAboutDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
if(HIWORD(wParam)==BN_CLICKED)
{
UNIT nId=LOWORD(wParam); //被按下按钮的ID。
HWND hCtl=(HWND) lParam; //被按下按钮的HWND。
}
return CDialog::OnCommand(wParam, lParam);
}
按钮被按下以后会用BN_CLICKED做参数向父窗口发送WM_COMMAND消息,你只要在父窗口中处理这个消息就是了。 至于你说动态改变处理方式的问题,你只要设置一个变量来指明当前采用哪种处理方式,在OnCommand中调用相应的处理例程就行了。
马鸣风萧萧 2003-04-06
  • 打赏
  • 举报
回复
: webber84(***闭关修炼中***)
是的,我只是想对每个按钮的按键消息进行处理,但对每个按钮的消息进行消息映射,麻烦仅仅是小事,更重要的事我要做的程序对按钮消息的处理是动态的,处理代码随时都可能变化,因此我想静态的写每个按钮的消息映射不能凑效。我在sdk中见过SetClassLong ,可是在mfc中不知道该如何使用,特别是针对我现在的这个程序,不知您能否给我讲的详细一些,谢谢!!
webber84 2003-04-06
  • 打赏
  • 举报
回复
本来用SDK的话用SetClassLong可以修改一个窗口的窗口过程,但是MFC的消息运行机制要求所用窗口的窗口过程都是一个叫AfxWindProc的函数,如果SetClassLong不知道会不会出问题。你可以试试看。其实如果只是简单的按键消息,可以通过ON_COMMAND_RAGE来处理,因为按钮被按下时都是通过WM_COMMAND消息来通知父窗口的

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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