怎么让对话框程序启动时隐藏?
如题. thanks 问题点数:150、回复次数:27Top
1 楼dgj(我是一匹狼)回复于 2002-05-24 22:09:58 得分 10
ShowWindow(SW_HIDE);Top
2 楼vtable9999(肝肝肝肝)回复于 2002-05-24 22:11:59 得分 0
我看到在int CWnd::RunModalLoop(DWORD dwFlags)中显示对话框的代码就只有这么一段:
// show the dialog when the message queue goes idle
if (bShowIdle)
{
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
}
这岂不是无法让它以SW_HIDE启动???Top
3 楼xuying()回复于 2002-05-24 22:12:00 得分 0
在OnInitDialog函数中添加:
ShowWindow(SW_HIDE);
Top
4 楼vtable9999(肝肝肝肝)回复于 2002-05-24 22:12:53 得分 0
to dgj(我是一匹狼):
我是想知道如何在启动时隐藏.Top
5 楼vtable9999(肝肝肝肝)回复于 2002-05-24 22:13:49 得分 0
我不知道在什么地方加上ShowWindow(SW_HIDE)才能让程序界面不出现Top
6 楼papaya_stone(^_^)shentong(^_^)回复于 2002-05-24 22:25:59 得分 30
在OnInitDialog()中;
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
ShowWindow(SW_HIDE);
return TRUE; // return TRUE unless you set the focus to a control
}Top
7 楼lin1980(Hydralisk)回复于 2002-05-24 22:28:39 得分 10
同意Top
8 楼papaya_stone(^_^)shentong(^_^)回复于 2002-05-24 22:33:44 得分 0
呵呵,好像不成耶!Top
9 楼xuying()回复于 2002-05-24 22:36:52 得分 0
不行,放在OnInitDialog中不可以,我试过了。Top
10 楼lj9852(Loading)回复于 2002-05-24 22:45:57 得分 30
在你的OnInitDialog()里加入这一段:
WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(& wp);
立刻搞定!Top
11 楼papaya_stone(^_^)shentong(^_^)回复于 2002-05-24 22:49:30 得分 0
这样:
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//隐藏窗口
WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(& wp);
return TRUE; // return TRUE unless you set the focus to a control
}
Top
12 楼kestrel(隼)回复于 2002-05-24 22:55:26 得分 10
干吗这么麻烦?换个角度思考问题,你可以把它做成封面嘛,显示若干时间后
AfxGetMainWnd()->ShowWindow(SW_HIDE);Top
13 楼xuying()回复于 2002-05-24 22:56:16 得分 0
测试通过,楼上的对。Top
14 楼papaya_stone(^_^)shentong(^_^)回复于 2002-05-24 23:02:51 得分 0
这两个都不成:
AfxGetMainWnd()->ShowWindow(SW_HIDE);
::ShowWindow(m_hWnd,SW_HIDE);
:——(Top
15 楼roland_c(归去来兮)回复于 2002-05-24 23:13:18 得分 10
对话框资源中有一个Visual项,只要它不打勾就可以Top
16 楼xuying()回复于 2002-05-24 23:24:13 得分 0
在对话框资源中改也不管用。Top
17 楼vtable9999(肝肝肝肝)回复于 2002-05-24 23:39:52 得分 0
我先试试Top
18 楼vtable9999(肝肝肝肝)回复于 2002-05-24 23:46:45 得分 0
to papaya_stone(^_^)shentong(^_^)
to xuying()
to lj9852(老实狼)
哎,不是很理想呀, SW_HIDE没有起作用
谁有更好的方法???Top
19 楼vtable9999(肝肝肝肝)回复于 2002-05-24 23:50:39 得分 0
int CWnd::RunModalLoop(DWORD dwFlags)
// show the dialog when the message queue goes idle
if (bShowIdle)
{
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
bShowIdle = FALSE;
}
MFC代码是这样的,是不是无法实现这种功能??Top
20 楼xuying()回复于 2002-05-24 23:56:01 得分 0
我测试了 papaya_stone(^_^)shentong(^_^) 的方法,没有问题啊。Top
21 楼vtable9999(肝肝肝肝)回复于 2002-05-25 00:00:22 得分 0
它只是把对话框弄小了,在任务栏还是有图标, SW_HIDE没有起作用Top
22 楼pcman1990(pcman)回复于 2002-05-25 00:04:09 得分 0
试试这个:
在OnInitDialog中加入下面代码:
ModifyStyle(WS_VISIBLE, 0);
Top
23 楼pcman1990(pcman)回复于 2002-05-25 00:06:37 得分 0
ModifyStyle(WS_VISIBLE, 0);
加在OnInitDialog()最后return之前Top
24 楼masterz(www.fruitfruit.com)回复于 2002-05-25 00:24:11 得分 30
add WM_WINDOWPOSCHANGING handler,
if (lpwndpos->flags & SWP_SHOWWINDOW)
{
lpwndpos->flags &= ~SWP_SHOWWINDOW;
PostMessage(WM_WINDOWPOSCHANGING, 0, (LPARAM)lpwndpos);
ShowWindow(SW_HIDE);
}
else
CDialog::OnWindowPosChanging(lpwndpos);Top
25 楼111222(www.111222.cn)回复于 2002-05-25 00:28:31 得分 10
pretranslatemsg里把WM_SHOW过滤一下不就得了Top
26 楼improgrammer(无忌)回复于 2002-05-25 01:28:38 得分 10
vtable9999:
int CWnd::RunModalLoop(DWORD dwFlags);是不是可以override的虚拟函数?
Top
27 楼lj9852(Loading)回复于 2002-05-25 02:34:57 得分 0
你的意思是在任务栏也要隐藏吗,在OnInitDialog()里加入:
//隐藏窗体:
WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(& wp);
//在任务栏和atl+tab列表中隐藏:
ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);Top
28 楼vtable9999(肝肝肝肝)回复于 2002-05-25 03:10:42 得分 0
to lj9852(老实狼):
WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(& wp);
它只是把对话框弄小了,对吧?效果不好
to improgrammer():
RunModalLoop不是virtual函数,不过可以重载。
通过重载DoModel、RunModelLoop可以解决问题,谢谢各位!!!
Top




