使运行的窗口不在任务栏显示

转自:http://www.plm.hk/phpgm/archiver/tid-2457.html

 

jean 发表于 2009-10-23 05:16

使运行的窗口不在任务栏显示

使运行的窗口不在任务栏显示

SetWindowLong(Application->Handle,
              GWL_EXSTYLE,
              (GetWindowLong(Application->Handle,
                             GWL_EXSTYLE)&(~WS_EX_APPWINDOW))|WS_EX_TOOLWINDOW);

///
我现在想在一运行我的程序时,就实现如何功能:
1  若任务栏没隐藏,就执行隐藏命令;
2  若已隐藏,则不作任何操作.
请问应该如何写此代码?

HWND hWnd=FindWindow("Shell_TrayWnd",NULL);
if (!IsWindowVisible(hWnd))
return;
else
ShowWindow(hWnd, SW_HIDE);
///

主要是重载WndProc,
class TForm1 : public TForm
{
__published:        // IDE-managed Components
    void __fastcall FormShow(TObject *Sender);
private:        // User declarations
protected:
    void __fastcall WndProc(TMessage& Msg);
public:                // User declarations
    __fastcall TForm1(TComponent* Owner);
};

//-------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//-------------------------------------------------------------
void __fastcall TForm1::WndProc(TMessage& Msg)
{
    if (Msg.Msg==WM_SYSCOMMAND && (Msg.WParam&
        0xFFF0)==SC_ICON) {
        Msg.Result = 0;
        WindowState = wsMinimized;
    }
    else
        TForm::WndProc(Msg);
}
//---------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
    ShowWindow(Application->Handle, SW_HIDE);
}

原理是:在用BCB写的程序中,其实VCL自动创建了一个你看不见的窗口作为程序的主窗口(从SDK角度看)。而你自己设定的主窗口,实际上并不是程序的主窗口。所以说,在任务栏显示的,是VCL自动创建的那个窗口,所以要让它不在任务栏显示,就需要在程序的VCL的主窗口显示后,将那个真正的主窗口隐藏就可以了,就是在FormShow里调用ShowWindow(Application->Handle,SW_HIDE);但是仅仅这样做还不行。因为当用户执行VCL的主窗口的系统菜单时,VCL会拦截处理这些系统消息。当用户按最小化按钮时,VCL会自动将这个消息传给那个看不到的真正的主窗口,同时显示那个主窗口,所以还需要在VCL的主窗口里拦截最小化消息,不让VCL处理这个消息。这样就完全达到了不在任务栏显示窗口的目的。

下边的不对,但可以参考//
这样的调用这个api函数

void __fastcall TForm1::FormCreate(TObject *Sender)
{
   SetWindowLong(Application->Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
}

API函数:Shell_NOtifyIcon()
    function Shell_NotifyIcon(dwMessage:DWORD;lpData:PNotifyIconData):BOOL; stdcall;
其中dwMessage的值:
NIM_ADD        0             将一个图标加任务栏
NIM_MODIFY     1
转自PLM研究,漂亮妹,www.plm.hk

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值