请教CreateWindow 来的窗口 获得焦点和切换焦点的问题

YourKing 2010-10-26 06:35:31
问题描述:
如果用MFC新建一个Dialog工程,然后在Dailog上面拖两个按钮Button1,Button2,然后直接运行,通过方向键或者Tab键就可以直接在这两个按钮直接切换焦点了。
现在我需要用Win32 API CreateWindow来创建个窗口,然后用CreateWindow(TEXT("button")....来创建相应的两个窗口,在创建时同样加入了WS_TABSTOP,但是却无法通过方向键来切换焦点。在处理方向键的消息里加SetFocus是可以将焦点设定到某个按钮上,但是之后方向键就无响应了,应该是父窗口失去焦点所以收不到方向键消息的。
怎么样才能实现跟MFC Dailog一样的效果呢?
...全文
171 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
YourKing 2010-10-27
  • 打赏
  • 举报
回复
非常感谢 schlafenhamster
muzizongheng 2010-10-26
  • 打赏
  • 举报
回复
贴出代码, 是不是createwindow的父窗体指针问题。
ctwoz 2010-10-26
  • 打赏
  • 举报
回复
学习。。。。。。。
schlafenhamster 2010-10-26
  • 打赏
  • 举报
回复
1:要使用accel, 在int WINAPI WinMain()中:
//VK_TAB
acc.fVirt=FVIRTKEY;
acc.key=VK_TAB;
acc.cmd=IDC_KEY_TAB;
ghaccelTable=CreateAcceleratorTable(&acc,1);//一个

//
while(GetMessage(&Message,0,0,0))
{ // don't need if TTF_SUBCLASS
//if(m_hToolTip) SendMessage(m_hToolTip, TTM_RELAYEVENT, 0, (LPARAM)&Message);
if (!TranslateAccelerator(hParentWnd, ghaccelTable, &Message))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
return Message.wParam;
2:在 LRESULT APIENTRY WndProc()响应command:
if((wParam & 0xFFFF)==IDC_KEY_TAB)
{//VK_TAB
if(GetFocus()==m_hListBox)//create时保存 {
OutputDebugString("now box\n");
SetFocus(m_hTreeView);)//create时保存 }
else
{
OutputDebugString("now view\n");
SetFocus(m_hListBox);
}
}
YourKing 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]

你可以自己处理VK_TAB键来设置SetFocus焦点问题
[/Quote]
SetFocus是可以将焦点设定到某个按钮上,但是之后方向键就无响应了,应该是父窗口失去焦点所以收不到方向键消息的。
只能设置一次焦点,不能实现切换焦点
Eleven 2010-10-26
  • 打赏
  • 举报
回复
你可以自己处理VK_TAB键来设置SetFocus焦点问题

15,979

社区成员

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

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