请教关于控件焦点问题

wildfish 2003-12-21 08:08:30
在一个对话框中有很多控件(多于50个),它们分成N个组,用一变量(m_nSel)保存最新获得焦点的控件所属的组号。
例如:有30个控件,分成5组,当第一组中的任何一个组件获得焦点时,m_nSel = 1

由于控件数过多,不想为每一个控件处理SetFocus函数

各位请帮帮我,现在急需解决。
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wildfish 2003-12-23
  • 打赏
  • 举报
回复
问题解决了,我得载了OnCmdMsg函数。各位帮我看看,这种方法好不好。
OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// TODO: Add your specialized code here and/or call the base class
if ((EN_SETFOCUS == nCode) || //edit box
(CBN_SETFOCUS == nCode) || //combo box
(0x004efff9 == nCode)) //data time picker 这里有点问题
{
SelectItem(nID);
}

return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
这里有个问题,时间控件焦点我不知道是哪个宏,系统用的是WM_NOTIFY消息中的NM_SETFOCUS,
0x004efff9 这个值我是通过查看Call Stack窗口中找到的,不知这个值是不是定值?

wildfish 2003-12-23
  • 打赏
  • 举报
回复
我试了,还是不行,当控件获得焦点时,根本就不进SetFocus函数。
用 ON_COMMAND_RANGE 能否处理SETFOCUS消息?
是不是我的程序有问题,请帮我看看。

.H
// Generated message map functions
//{{AFX_MSG(CM320Dlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
//}}AFX_MSG
afx_msg void FocusFun(UINT ui);
DECLARE_MESSAGE_MAP()

.CPP
BEGIN_MESSAGE_MAP(CM320Dlg, CDialog)
//{{AFX_MSG_MAP(CM320Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(IDC_EDIT1, IDC_EDIT2, FocusFun)
END_MESSAGE_MAP()

能给我一个例子吗?我现在急关要解决,分不够可再加。
email:yumhmail@163.net
qq:2808307

不用焦点也可以,只要能获得最后一次修改的组号就很。
xiaohonghong 2003-12-22
  • 打赏
  • 举报
回复
把成组的控件ID设成连续的,然后
在头文件中
begin_message_map()
//手工加入
ON_COMMAND_RANGE(ID_FIRST,ID_END,SetFocus);
//
end_message_map()
cadinfo 2003-12-21
  • 打赏
  • 举报
回复
有个处理消息范围(RANGE)的,把成组的控件ID设成连续的就可以了

15,978

社区成员

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

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