我想起动时窗口直接隐藏,可是窗口要闪烁一下,怎样解决?

doskey 2002-08-25 08:44:15
BOOL CProcessListApp::InitInstance()
{
...
m_pMainWnd->ShowWindow(SW_HIDE);
...
}
请大侠指教~!
...全文
540 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
YoungBoz 2002-09-28
  • 打赏
  • 举报
回复
看来微软也欺骗了我们,其实
// m_pMainWnd->ShowWindow(SW_SHOW);
// m_pMainWnd->UpdateWindow();
这两行不但毫无用处,真正的发行版其实还应把这两行丢掉才对。不然的话会使命令行失效。想想也是,虽然我们更多的时候只是双击打开程序,忽略了命令行参数的存在,而Windows程序还在一丝不苟的做着命令行检查。
YoungBoz 2002-09-28
  • 打赏
  • 举报
回复
问题终于可以解决了,其他不用作任何改动,只需InitInstance()检查命令行之后紧接的位置加上一句m_nCmdShow=0;
如以下形式:
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
m_nCmdShow=0;
// Dispatch commands specified on the command line

//注意必须在下一行之前,否则无效。
if (!ProcessShellCommand(cmdInfo))
return FALSE;

// The one and only window has been initialized, so show and update it.
// m_pMainWnd->ShowWindow(SW_SHOW);
// m_pMainWnd->UpdateWindow();
我已在我的程序中测试通过。这应该也是MFC的标准方法吧。
dycdyc123 2002-09-28
  • 打赏
  • 举报
回复
NND, use MOveWindow(0,0,...)

一定不闪
caitou123 2002-09-28
  • 打赏
  • 举报
回复
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{

cs.cx =0;cs.cy=0;
cs.x=cs.y= -100;
...

把框架挪到屏幕外去,确实不闪,不知是不是你要的:)

Tiger_张虎 2002-09-28
  • 打赏
  • 举报
回复
窗口要闪烁的原因,optman分析的不错。无非是先是可见,然后很快变不可见。

不管用什么样的窗口,都要先创建。如果在创建的时候就把它设置一个WS_VISIBLE属性,那它就已经可见了,在用ShowWindow(SW_HIDE),是肯定后闪烁的。

你用SDI,无非是在创建FRAME窗口的时候,不要加WS_VISIBLE属性就好了。

注意:一定要改FRAME窗口的属性,要是该成了子窗口,就可能出现fan_dtor说的情况!

祝你好运!
Alain_Delone 2002-09-28
  • 打赏
  • 举报
回复
你试试在创建窗口时,窗口的风格STYLE里把WS_VISBLE去掉,不过我没试过,
你试试吧
fan_dtor 2002-09-28
  • 打赏
  • 举报
回复
YoungBoz(西山月) 兄的这种方法不行啊!我试过了。
它只是把FRAME的最小化,最大化和CLOSE VISIBLE了而已。

optman(optman) 兄的更不可行,在CreateWINDOW时窗口就已经
建立了,不信你可以把m_pMainWnd->SHOWWINDWOS(SW_SHOW)和UPDATEWINDOW去掉试试

等待大虾指点。
YoungBoz 2002-09-28
  • 打赏
  • 举报
回复
>>to optman(optman) 我搞不明白,为什么说SDI就不行?任何的Window程序>>要显示窗口,都必须在某处调用了ShowWindow,找到它!


这句话的后半句可有严重问题啊。CreateWindow或者CreateWindowEx创建窗口时就可以确定窗口的可见与不可见。
YoungBoz 2002-09-28
  • 打赏
  • 举报
回复
optman(optman) 虽然说出了一点,但是还是没有抓住要点。
引起窗口闪烁的原因应该是:开始时用CreateWindow创建窗口时窗口已经是可见的,所以在InitInstance()中用m_pMainWnd->ShowWindow(SW_HIDE)隐藏窗口会产生闪烁。
如果明白了这个原因就好办了,我们只需要让创建的窗口本来就是不可见的。这一点容易做到的了,只要在用CreateWindow创建窗口时不要加上WS_VISIBLE属性。在MFC中就在PreCreateWindow 加上一句 cs.style&=(~WS_VISIBLE);
你的程序如果还没有添加该成员函数则添加它。
现在你可以把ShowWindow取消了,因为创建的窗口本来就是不可见的了。
前面的各位想得太复杂了。
nevergrief 2002-09-27
  • 打赏
  • 举报
回复
CHideDlg::CHideDlg(CWnd* pParent /*=NULL*/)
: CDialog(CHideDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CHideDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
hKernelLib = LoadLibrary("kernel32.dll");
if(hKernelLib)
{
lpfnDllFunc1 =(LPFNDLLFUNC1) GetProcAddress(hKernelLib,"RegisterServiceProcess");

if(lpfnDllFunc1)
lpfnDllFunc1(GetCurrentProcessId(),1);
}

}
blackpearl2 2002-09-27
  • 打赏
  • 举报
回复
在ShowWindow(sw_hide)的同时,设为图标程序。保证把不闪烁,我已经开发过了。我的服务器程序就是这样写的。
optman 2002-09-27
  • 打赏
  • 举报
回复
让我们来讨论一下,窗口为什么会闪烁?

那是因为开始的时候,我们创建了窗口,然后ShowWindow,UpdateWindow了。
这时候,窗口已经出现了。以后,任你再怎么Hide,都会出现闪烁的现象!

所以,解决问题的关键就是,一开始的时候,就不要ShowWindow。仅仅CreateWindow就可以了!这才是解决问题最自然的方式,而不是采用什么雕虫小技。

我搞不明白,为什么说SDI就不行?任何的Window程序要显示窗口,都必须在某处调用了ShowWindow,找到它!
zypk 2002-09-27
  • 打赏
  • 举报
回复
偶得一法,锁匠不妨一试?
l 先在构造涵数中设置布乐变量 visible值为false.

visible = false;
l 重载 WM_WINDOWPOSCHANGING,并添加下面代码:

void CTest_deleteDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
if(!visible)
lpwndpos->flags &= ~SWP_SHOWWINDOW;

CDialog::OnWindowPosChanging(lpwndpos);
}
l 然后设布乐visible变量值true,并在要显示窗口时,再用ShowWindow(SW_SHOW)既可。

visible = true;
ShowWindow(SW_SHOW);
netsbull 2002-09-26
  • 打赏
  • 举报
回复
初始化就把窗口的位置设道屏幕外,然后再隐藏,在设置为正常的位置
zhlqcn 2002-09-26
  • 打赏
  • 举报
回复
把ShowWindow去掉!
没用的,,
是sdi
optman 2002-09-26
  • 打赏
  • 举报
回复
真傻!一开始的时候,你为什么要ShowWindow()呢?
找到InitInstance()函数,把ShowWindow去掉!
krorain_wan 2002-09-26
  • 打赏
  • 举报
回复
alphapiao 2002-09-26
  • 打赏
  • 举报
回复
ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);
::MoveWindow(m_hWnd,0,0,0,0,TRUE);
放在CMainFrm的oncreate中,有一点点闪,基本看不出来。
doskey 2002-08-26
  • 打赏
  • 举报
回复
SDI程序~!
doskey 2002-08-26
  • 打赏
  • 举报
回复
我试了的,没用,还是会闪烁
加载更多回复(12)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧