如何创建无焦点非模态对话框?

DailyJob 2008-08-06 11:21:47
如题! 类似于输入法中的软键盘
这个问题前2天在CSDN中提问过,但目前还是没有解决,希望各位高人不吝赐教
...全文
183 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Marshall 2009-03-02
  • 打赏
  • 举报
回复
我的作法是:

dlg->Create( ID );
dlg->ShowWindow(SW_SHOWNOACTIVATE);

然后在dlg的OnInitDialog中把对话框设置成Disabled:
ModifyStyle( 0, WS_DISABLED );

然后开启计时器, 比如300ms后把窗口设回Enabled:
EnableWindow( TRUE );

这样儿就可以了! 本人测试过!
stivenjia 2008-08-07
  • 打赏
  • 举报
回复
如果做成某个窗口的子窗体呢
candyice 2008-08-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jameshooo 的回复:]
如果对话框不是顶级窗口,就不能响应WM_ACTIVE消息。可以按照下面的方式来使用对话框:
dlg->Create(...); // 注意去掉WS_VISIBLE风格
dlg->ShowWindow(SW_SHOWNOACTIVATE);
[/Quote]
DailyJob 2008-08-06
  • 打赏
  • 举报
回复
myGod!
DailyJob 2008-08-06
  • 打赏
  • 举报
回复
没有人会吗??
Hiiishe 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 primer_programer 的回复:]
有些东西也许是一个假象,不可以创建完之后再将父窗口设置一次焦点么?
向这样
CTestDlg* pDlg = new CTestDlg;
pDlg->Create( IDD_DIALOG, this );
pDlg->ShowWindow( SW_SHOW );
this->SetFocus();
[/Quote]
primer_programer 2008-08-06
  • 打赏
  • 举报
回复
有些东西也许是一个假象,不可以创建完之后再将父窗口设置一次焦点么?
向这样
CTestDlg* pDlg = new CTestDlg;
pDlg->Create( IDD_DIALOG, this );
pDlg->ShowWindow( SW_SHOW );
this->SetFocus();
jameshooo 2008-08-06
  • 打赏
  • 举报
回复
如果对话框不是顶级窗口,就不能响应WM_ACTIVE消息。可以按照下面的方式来使用对话框:
dlg->Create(...); // 注意去掉WS_VISIBLE风格
dlg->ShowWindow(SW_SHOWNOACTIVATE);

15,979

社区成员

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

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