首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么让窗口保持在最前面

2012-02-24 
如何让窗口保持在最前面? - C++ Builder / Windows SDK/API我程序的主窗口不是使用Application-CreateFor

如何让窗口保持在最前面? - C++ Builder / Windows SDK/API
我程序的主窗口不是使用Application->CreateForm(__classid(TMainFm), &MainFm);这方式创建的,而是直接new出来的。
试过的方法:
1.重载CreateParams(Controls::TCreateParams &Params)方法
void __fastcall TMainFm::CreateParams(Controls::TCreateParams &Params)
{
  TForm::CreateParams(Params);
  Params.ExStyle = Params.ExStyle & (~WS_EX_APPWINDOW) | WS_EX_TOPMOST;
}

2.使用api:SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

两个方法都不能达到效果,我在另一个小例子程序里面用第一种方法就OK了,这个小例子程序的主窗口是Application->CreateForm(__classid(TMainFm), &MainFm);方式创建的,难道跟窗口的创建方式有关系?
各位大侠帮忙解决一下!
另:我现在的程序的主窗口不能使用Application->CreateForm(__classid(TMainFm), &MainFm);这种方式创建,必须使用new方式创建。

[解决办法]
你的第一种方法不完善,试一下下面的!!
class TForm2 : public TForm 

__published: // IDE-managed Components 
private: // User declarations 
protected: 
virtual void __fastcall CreateParams(TCreateParams & Param); 
public: // User declarations 
__fastcall TForm2(TComponent* Owner); 
}; 
void __fastcall TForm2::CreateParams(TCreateParams & Param) 

//调用基类的函数 
TForm::CreateParams(Param); 
Param.ExStyle |= WS_EX_TOPMOST; 

//这儿最关键的是只要Param.WndParent不是Application- >Handle就可以了, 
//不一定非要用GetDesktopWindow(),用其它的窗口也可以。 
Param.WndParent = GetDesktopWindow(); 
}

[解决办法]

C/C++ code
//這樣子不行嗎?TForm2 *Form = new TForm2(this);Form->FormStyle =  fsStayOnTop ;Form->ShowModal();delete Form ;
[解决办法]
探讨
1楼的方法很管用,谢谢!能否解释下,为什么非要这样才行呢?

2楼的方法早就试过了,根本不行的。

热点排行