因为在调用CWinApp::OnFileNew时,主窗口被创建的缺省属性是可见的。
程序中调用ShowWindow(SW_HIDE)前是可见的。所以会闪一下。
如果要不闪,可以从CSingleDocTemplate或CMultiDocTemplate派生自己的类(看你的应用程序是什么类型了),重载OpenDocumentFile函数,比如:
CDocument* CMyDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,
BOOL bMakeVisible)
{
// make invisible
bMakeVisible = FALSE;
return CSingleDocTemplate::OpenDocumentFile(lpszPathName, bMakeVisible);
}
在app初始化代码里,将
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
改为
pDocTemplate = new CMyDocTemplate(
并把这两行注释掉:
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
下面是我的实现代码:
MyDocTemplate.h:
#pragma once
#include "afxwin.h"class CMyDocTemplate :
public CSingleDocTemplate
{
DECLARE_DYNAMIC(CMyDocTemplate)
public:
CMyDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass);
~CMyDocTemplate(void);
virtual CDocument* OpenDocumentFile(
LPCTSTR lpszPathName, BOOL bMakeVisible = FALSE);
};MyDocTemplate.cpp:
#include "StdAfx.h"
#include "mydoctemplate.h"IMPLEMENT_DYNAMIC(CMyDocTemplate, CSingleDocTemplate)CMyDocTemplate::CMyDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass) :
CSingleDocTemplate(nIDResource, pDocClass, pFrameClass, pViewClass)
{
}CMyDocTemplate::~CMyDocTemplate(void)
{
}
CDocument* CMyDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,
BOOL bMakeVisible)
{
bMakeVisible = FALSE;
return CSingleDocTemplate::OpenDocumentFile(lpszPathName, bMakeVisible);
}我不知道还有什么其他方法能使主窗口不闪动。
继续关注。
程序中调用ShowWindow(SW_HIDE)前是可见的。所以会闪一下。
如果要不闪,可以从CSingleDocTemplate或CMultiDocTemplate派生自己的类(看你的应用程序是什么类型了),重载OpenDocumentFile函数,比如:
CDocument* CMyDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,
BOOL bMakeVisible)
{
// make invisible
bMakeVisible = FALSE;
return CSingleDocTemplate::OpenDocumentFile(lpszPathName, bMakeVisible);
}
在app初始化代码里,将
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
改为
pDocTemplate = new CMyDocTemplate(
并把这两行注释掉:
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
下面是我的实现代码:
MyDocTemplate.h:
#pragma once
#include "afxwin.h"class CMyDocTemplate :
public CSingleDocTemplate
{
DECLARE_DYNAMIC(CMyDocTemplate)
public:
CMyDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass);
~CMyDocTemplate(void);
virtual CDocument* OpenDocumentFile(
LPCTSTR lpszPathName, BOOL bMakeVisible = FALSE);
};MyDocTemplate.cpp:
#include "StdAfx.h"
#include "mydoctemplate.h"IMPLEMENT_DYNAMIC(CMyDocTemplate, CSingleDocTemplate)CMyDocTemplate::CMyDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass) :
CSingleDocTemplate(nIDResource, pDocClass, pFrameClass, pViewClass)
{
}CMyDocTemplate::~CMyDocTemplate(void)
{
}
CDocument* CMyDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,
BOOL bMakeVisible)
{
bMakeVisible = FALSE;
return CSingleDocTemplate::OpenDocumentFile(lpszPathName, bMakeVisible);
}我不知道还有什么其他方法能使主窗口不闪动。
继续关注。
解决方案 »
- 如何用程序操作gpedit.msc->计算机配置->安全设置->本地策略->安全选项->网络访问: 本地帐户的共享和安全模式?
- 深圳商讯网的朋友进来下
- 线程用Sleep处于暂停时,外部如何退出此线程?
- win2000/xp user权限下scsi command的方法
- 菜鸟问题,在线等待,为什么在console工程中不能编译win32的程序?
- We are looking for first-class developers and programmers to work on contract for our new operations in China.
- 如何激活事件?
- 请人详细讲解一下win32 SDK双缓冲地原理!!感谢
- 怎样创建没有锯齿的图形????
- 又是关于afxcomctl32.h错误,求助
- SDI窗口,视类为CFormView,怎么将一个状态条加到这个视类的底部?
- 菜鸟问题。如何加上滚动条?
CDocument* CMyDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,BOOL bMakeVisible)中第二个参数bMakeVisible好象是指定包含文档的窗口是否可见,而包含文档的窗口应该是一个视图而不是主窗口吧。不知道我的理解对不对,请指教。
你在下面语句之前SHOW SPLASH窗口,在之后HIDE/DESTROY,就更好了嘛!
if (!ProcessShellCommand(cmdInfo))
谢谢二位,呵呵...二位的方法都可以,一个简单,一个对mfc理解很深...呵呵...谢过了...