如何让窗口保持在最前面? - 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();
}
[解决办法]
//這樣子不行嗎?TForm2 *Form = new TForm2(this);Form->FormStyle = fsStayOnTop ;Form->ShowModal();delete Form ;
[解决办法]