1. 三行代码可以把程序的任务栏图标去掉
DWORD dwExStyle = GetWindowLong(HWND, GWL_EXSTYLE);
dwExStyle |= WS_EX_TOOLWINDOW;
SetWindowLong(HWND, GWL_EXSTYLE, dwExStyle);
2. 生成一个父窗口,隐藏它,然后将你要从taskbar上移除的窗口的父窗口设成这个隐藏的父窗口(如果WINVER > = 0x0400,还需要去掉窗口的WS_EX_APPWINDOW属性)
基于对话框的app的例子:
CMyDialog::OnInitDialog里面添加如下调用:
ModifyStyleEx( WS_EX_APPWINDOW, 0 );
CMyAPP::InitInstance做如下相应改动:
--------------------------
CMyDlg dlg();
m_pMainWnd = & dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
...
-----------------------改为
CHideWindow p;
CTestDlg3Dlg dlg(& p);
m_pMainWnd = & dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
-------------------
class CHideWindow : public CWnd
{
public:
CHideWindow()
{
CString strMyClass = AfxRegisterWndClass(
CS_VREDRAW | CS_HREDRAW,
::LoadCursor( NULL, IDC_ARROW ),
(HBRUSH) ::GetStockObject(WHITE_BRUSH),
::LoadIcon(NULL,IDI_APPLICATION));
BOOL b = CreateEx( 0, strMyClass,
_T("HideWindow_LLY"),
WS_SYSMENU,
CRect(0, 0,0,0),
NULL, 0);
}
~CHideWindow()
{
}
};
DWORD dwExStyle = GetWindowLong(HWND, GWL_EXSTYLE);
dwExStyle |= WS_EX_TOOLWINDOW;
SetWindowLong(HWND, GWL_EXSTYLE, dwExStyle);
2. 生成一个父窗口,隐藏它,然后将你要从taskbar上移除的窗口的父窗口设成这个隐藏的父窗口(如果WINVER > = 0x0400,还需要去掉窗口的WS_EX_APPWINDOW属性)
基于对话框的app的例子:
CMyDialog::OnInitDialog里面添加如下调用:
ModifyStyleEx( WS_EX_APPWINDOW, 0 );
CMyAPP::InitInstance做如下相应改动:
--------------------------
CMyDlg dlg();
m_pMainWnd = & dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
...
-----------------------改为
CHideWindow p;
CTestDlg3Dlg dlg(& p);
m_pMainWnd = & dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
-------------------
class CHideWindow : public CWnd
{
public:
CHideWindow()
{
CString strMyClass = AfxRegisterWndClass(
CS_VREDRAW | CS_HREDRAW,
::LoadCursor( NULL, IDC_ARROW ),
(HBRUSH) ::GetStockObject(WHITE_BRUSH),
::LoadIcon(NULL,IDI_APPLICATION));
BOOL b = CreateEx( 0, strMyClass,
_T("HideWindow_LLY"),
WS_SYSMENU,
CRect(0, 0,0,0),
NULL, 0);
}
~CHideWindow()
{
}
};
解决方案 »
- m_ImageList.Create(IDB_BITMAP1,16,0,RGB(255, 0 ,255));
- 1万可用分,大家要多少我就散多少(八)
- 有两个程序,一个程序有一个父窗口和一个子窗口,另一个程序有一个主窗口
- 大四已经没课,学校安排了教育实习,但是,本人从来没有想过从事教育,只想从事IT 事业。专业是:计算机科学与技术。想找个软件公司实习!!
- 【初学者】Excel的基本问题
- htmlview有问题啊
- 关于MFC中创建UI线程的问题.
- 网络编程解包和压包
- 运行错误:Unhandled exception in hello.exe: 0xC0000005:Access Violation
- CSocket在工作者线程中使用出现非法操作
- 图标移动地问题
- VC关于ADO开发中的问题!急
用过金山词霸的朋友一定对其主窗口的工作方式很感兴趣。当它显示时,在任务栏有一个对应的按纽,而当它最小化的时候则从任务栏上消失了。如何在我们的程序中实现这一技巧呢?通过研究Delphi程序的工件方式和试验摸索,本人得出了实现这一技巧的方法。现在写出来与大家共享,希望能对大家编程有所帮助。其实本来实现这一巧很容易的,只要在窗口的最小化事件代码中加入:self.hide;就行了。但问题是 Form没有最小化事件。通过摸索,本人发现当主窗口最小化时会调用Application 对 象的OnMinimize方法。只要在自己的主窗口定义中添加一个自己的方法,再将它安装Application对象的OnMinimize方法上去就行了。要再次显示主窗口只要调用show; 方法就行了。不过要注意:一定要主窗口的OnShow事件方法中加入Application.Resore;方法调用,否则,第二次按最小化按纽的时候,程序将什么也不做。要使程序启动时不显示主窗口,只要在Project代码中加入Application.ShowMainForm:=false; 就行了。以下是程序片段,过几天本人将程序完善后会放到主页上来。
{WinKill.Dpr}
program WinKill;uses
Forms,
FMain in 'FMain.pas' {FormMain};{$R *.RES}begin
Application.Initialize;
Application.CreateForm(TFormMain, FormMain);
Application.ShowMainForm:=false;//*****
Application.OnMinimize:=FormMain.AppMinimize;//******
Application.Run;
end.{Unit FMain}
.
.
.
procedure TFormMain.M_ShowClick(Sender: TObject);
begin
self.Show;
end;
procedure TFormMain.AppMinimize(Sender: TObject);
begin
inherited;
self.Hide;
end;
procedure TFormMain.FormShow(Sender: TObject);
begin
Application.Restore;
//如果将这句去掉,则第二次按最小化按纽的时候,程序将什么也不做。
end;
DWORD style = GetWindowLong(GWL_EXSTYLE);
style = style | WS_EX_TOOLWINDOW;
SetWindowLong(GWL_EXSTYLE, style);