Help me!!! MFC框架程序窗口如何永远不被激活? 超烦!!!

绿色环保-菜青虫 2003-10-09 06:25:55
我用MFC程序 Create 非模式(主窗口为非模式) 对话框结构程序时, 当调用Create()时, 窗口就被激活,跟踪到Create()内部, 发现的确有激活的地方,我头都大了!
我现在很需要在MFC对话、单文档的两种框架上实现一个进程多次启动是不影响其它进程窗体的方法。检验的方法是:玩全屏独占模式的DirectX游戏过程中,通过Timer或者其它途经启动这个进程,游戏没有任何影响(游戏进程仍为激活状态)便成功。



先谢大家了!
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
lop5712(LOP) :
你好!
窗口是需要的, 遗憾的是: 不知微软在 CreateWindow() 时做了什么手脚, 同样是 Create(), 主窗口一定是要被激活,而其它窗口则可以不激活.就因为没有它的代码害得大家研究一些低级的问题 :( 我们需要真正意义上自己的 OS, 否则我们永远被愚弄!
  • 打赏
  • 举报
回复
lop5712(LOP) :
你好可不可以详细一点呢?
lop5712 2003-10-10
  • 打赏
  • 举报
回复
不好意思,重看了下题目,我好象有点偏题
楼主是希望窗口不影响其他,但还要看见?
如果是这样,那楼主需要重载WM_SETFOCUS,并定个标志,在构造时赋为0,在WM_SETFOCUS中根据那个标志,决定是否调用父类的OnSetFocus;但是这不一定成功(我不清楚窗口的创建过程),如果失败,请将WS_VISIBLE窗口风格去掉,这样创建的窗口将不可见,也就不会影响别的窗口。但由于仍要使用,则在WM_CREATE中,调用ShowWindow将窗口再显示出来,这是窗口将不会得到焦点,所以应该成功(不能确定,我对创建过程不熟)。

如果使用第二个方法,楼主使用的是
BOOL Create( UINT nID, CWnd *pParentWnd = NULL );
这个重载形式不能指定窗口风格,所以楼主需要用另一个Create的重载形式(能指定窗口风格的重载形式)来创建对话框。

如果楼主并不需要使用窗口,那应该使用线程消息,而不是通过窗口发送消息。
lop5712 2003-10-09
  • 打赏
  • 举报
回复
为什么要创建窗口,光一个消息循环即可。如果非要创建窗口,创建窗口时不要指定WS_VISIBLE即可,即创建隐藏的消息旧可达到目的。因此楼主不能使用上面的
pDlg->Create(IDD_POPWINDOW_DIALOG);方式了,必须使用其重载形式
  • 打赏
  • 举报
回复
我在Create(IDD_POPWINDOW_DIALOG);时就没戏了!

BOOL CPopWindowApp::InitInstance()
{
CPopWindowDlg *pDlg = new CPopWindowDlg;
pDlg->Create(IDD_POPWINDOW_DIALOG);
m_pMainWnd = pDlg;
return TRUE;
}
思危 2003-10-09
  • 打赏
  • 举报
回复
在OnSetFocus()中把焦点该回去不行吗

15,471

社区成员

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

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