[添加][按钮][控件]请问如何使一个添加到按钮控件上的picture控件(加载了ICON图标)一直显示。我在对话框的初始化函数中做了如下
09月 16th, 2008 by admin
Posted in VC/MFC | No Comments »
HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON);
m_static.SetIcon(hIcon);
初始运行时,按钮控件和加载了图标的picture控件都能显示,但当点击按钮控件时,picture就不显示了。
我想让picture控件一直显示,请问高手怎么来实现。谢谢
把按钮加上WS_EX_TRANSPARENT扩展风格试试。
怎么加扩展风格,加扩展风格什么用?
你直接给按钮设置图标不就行了,何必再用一个控件覆盖?
在对话框资源上选择按钮,然后在属性窗口设置transparent。
如果用代码,先获得按钮指针或对象,然后ModifyStyleEx。
谢谢你的回复。你说的那种情况,我试过了。但是因为有个动态按钮,即初始显示“修改”,点击之后变成“保存”,按照你说的那样做,修改和保存会同时显示。
我就想在一个按钮的部分空间上贴上一个小的图片,让图片一直显示,不好实现吗?
你那picture控件是按钮的子窗口吗?还是直接放在了对话框上?
我先前做的不是按钮的子窗口,是直接放到对话框上的。请问怎么解决呢?
用SetParent设置一下。
控件之间如何进行SetParent呢?我想把IDC_BUTTON设置成为IDC_STAITC的父窗口,请问可以吗?代码应该怎么来写。
这样设置的话,会不会让static一直在button控件上显示(static上加载了图标)。就是让按钮美观,直观。
直接给按钮设置图标
用SetParent设置一下
[2003][添加][控件]VC++2003无法添加控件事件…………….50分!
09月 5th, 2008 by admin
Posted in VC/MFC | No Comments »
VC++2003建对话框工程,拖BUTTON控件至对话框双击添加事件时,鼠标一直处于等待状态……
另外我想在工程中加入一个新的对话框,insert DIALOG后双击新对话框添加类时,鼠标一直处于等待状态……
说明:
1.工作文件的属性并不是只读
2.我卸载VC后重装还是不行
3.系统重装后依然不行,
4.VC++2005也一样,(同事机子和我是一个安装文件他的正常)
5.VC++6.0没有问题
不可能是因为机子的配置不行吧,有点诡异
那个添加对话框应该是
DHtmlDialog,
怀疑你的机器内存不足或者IE控件出问题。
把杀毒软件什么的关掉后,试试看!
回ToperRay:我已经以把DHtmlDialog改为DIALOG了还是不行,
杀毒软件也下了一样没用,在原对话框上加BUTTON事件倒是可以了
运行时 CTRL+ALT+DELETE 看看内存 CPU 使用多少 应该是你的电脑的问题吧
CPU与内存都没有太大变化,占用不多
真是奇怪…..!
晕,误解我的意思了。
老大说明白点了,,,,
我比较菜,还是没想通问题到底出在哪……很急!
挺奇怪的现象!建议先对磁盘各分区进行扫描一下,看看文件系统或磁道有没有损坏的地方。
大家帮忙分析下原因吧,,,,,,
会不会是系统一些补丁的影响呢,或者是缺少什么组件?
重装系统,重装软件,,,,,,不知不觉中好了
依然不知道原因何在….
我也遇到类似的问题了,我的问题是对话框不能编辑,不能添加控件,双击控件没有反应,在编辑模式下整个对话框像是只读一样。
我是这么处理的,把工程文件夹下的*.opt文件给删了,然后重新编译,就好了。我用的是VC6.0
[对话][添加][图片]请教大家一个在对话框中添加图片的问题谢谢
08月 26th, 2008 by admin
Posted in VC/MFC | No Comments »
我想在对话框的一半的区域添加一个图片,该用什么方法啊?是用图象控件吗?图象控件该如何用啊?请高手指点,详细说以下,希望给个简单的代码例子,十分感谢
1楼的高手能详细说说吗?
有个CPictuerEx类很好用,可以试下
http://www.codeguru.com/cpp/g-m/bitmap/article.php/c4879/
怎样在Static属里指定使用图片属性,属性的样式下只有样式和边框两个选项可以下拉啊,没有图片属性啊,还有怎样将图片指定到Static啊?高手再指点下,谢谢
SetBitmap
- C/C++ code
-
// MyDlg.h #include "stdafx.h" class CMyDlg : public CDialog { DECLARE_DYNAMIC(CMyDlg) CStatic *m_pImg; CString m_strImagePath; public: CMyDlg(LPCTSTR lpszImagePath); ~CMyDlg(); protected: virtual void DoDataExchange(CDataExchange* pDX); virtual BOOL OnInitDialog(); DECLARE_MESSAGE_MAP() }; // MyDlg.cpp #include "MyDlg.h" IMPLEMENT_DYNAMIC(CMyDlg, CDialog) CMyDlg::CMyDlg(LPCTSTR lpszImagePath) { m_pImg = NULL; m_strImagePath = lpszImagePath; } CMyDlg::~CMyDlg() { if(m_pImg) { if(m_pImg->m_hWnd) { ::DeleteObject(m_pImg->SetBitmap(NULL)); m_pImg->DestroyWindow(); } delete m_pImg; } } BOOL CMyDlg::OnInitDialog() { If(::PathFileExists(m_strImagePath)) // 自己添加相应的库 { HBITMAP hbm = (HBITMAP)::LoadImage(NULL, m_strImagePath, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR|LR_DEFAULTSIZE|LR_LOADFROMFILE); if(hbm != NULL) { CBitmap *pbm = CBitmap::FromHandle(hbm); BITMAP bm = {0}; pbm->GetBitmap(&bm); m_wndBmp = new CStatic; m_wndBmp->Create(NULL, WS_CHILDWINDOW|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(0,0,bm.bmWidth,bm.bmHeight), this); pbm->Detach(); ::DeleteObject(m_wndBmp->SetBitmap(hbm)); } } }
新手路过,过来学习一下,帮你UP
把picture控件放到对话框中,右击该控件,选择属性,在类型中选择“位图”,在图像选项中选择“你要插入的图片”;
你要插入的图片可以在资源中导入~~~
楼上的方法最简单,LZ只需要准备好需要显示的bmp就OK
1、如果你画的是资源中的一个位图,那你可以用一个图片控件,将其属性中的type设置为Bitmap,然后再在Image属性的下拉列表框中选中你想要加载的那个图片的资源ID,这样图片就已经能显示出来了。
2、如果你是想从磁盘上动态地读取一个图片来显示,为了简单,你在对话框的头文件中引入#include <atlimage.h>,并定义一个读取图片的类成员变量,CImage m_backImage;并在你的对话框的OnInitDialog()函数里添加读取图片的代码,如下:
CString strPath = GetAppPath();//得到当前应用程序的路径,GetAppPath()是我写的一个函数,见后面的定义
backImage.Load(strPath + "\left.jpg");//这里的图片绝对路径你也可以自己设定
然后在对话框的OnPaint函数中添加如下代码:
CDC *pDC = GetDC();
m_backImage.BitBlt(pDC->GetSafeHdc(),100,10);//具体的绘制在什么位置你可以自己设置
ReleaseDC(pDC);
3、在第一种情况下你也可以用第二种方法,不过加载图片时用如下函数:
m_backImage.LoadFromResource(AfxGetResourceHandle(),IDB_BITMAP_LEFT);
10楼强大。1楼的方法也可以啊,而且应该比较详细了。
这个问题我以前也接触过,开始的时候我也找不到问题的原因,后来我进了一个技术交流群,这个群里的人挺多的,在里面可以沟通技术,你可以进去看一下.群号是:五+九+零+四+九+二+六+八。另外,这个群里可以接项目。
http://www.nuli365.com/ShowFile.aspx
test.rar
c盘放一张bmp图片 1.bmp
http://www.nuli365.com/ShowFileData.aspx?ID=369
创建有个性的对话框之MFC篇:
http://blog.csdn.net/orbit/archive/2005/08/23/463071.aspx
http://blog.csdn.net/orbit/archive/2005/08/23/463077.aspx
1楼的方法最简单。
fatal error C1083: Cannot open include file: 'atlimage.h': No such file or directory这个错误怎么改啊?
先在资源中导入需要的图片,取个名,比如取名为IDB_a1,在对话框中添加一个Static控件,设置其属性为图片,图片名为IDB_a1,在调整Static在对话框中的大小和位置
将该文件填加到工程中
fatal error C1083: Cannot open include file: 'atlimage.h': No such file or directory这个错误怎么改啊?
将该文件填加到工程中
10楼的方法正确。
[菜单][添加][响应]在菜单中如何添加 关于。。。 的响应
08月 23rd, 2008 by admin
Posted in VC/MFC | No Comments »
添加后的代码是
void CAboutDlg::Onabout()
{
CAboutDlg aboutDlg(this);
aboutDlg.DoModal();
}
但编译时候出现:“CAboutDlg::CAboutDlg(const CAboutDlg &)”: 不能将参数 1 从“CAboutDlg *const ”转换为“const CAboutDlg &”
这是怎么回事?应该怎么改呢?
谢谢~~
或者你的CAboutDlg::CAboutDlg(const CAboutDlg &):
改成CAboutDlg::CAboutDlg(const CAboutDlg *):
刚才我试了一下,用那个*this 但是编译时又出现了这个
“CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)
是怎么回事啊?
还是谢谢了~~
[vc2005][手动][添加]在vc2005中手动添加消息相应函数
08月 22nd, 2008 by admin
Posted in VC/MFC | No Comments »
在vc2005中手动添加消息相应函数
在源文件中手动添加ON_MESSAGE(WM_RECVDATA,&CchatDlg::OnRecvData)这句话时,总是报错
1>f:projectchatchatchatdlg.cpp(68) : error C2440: “static_cast”: 无法从“void (__thiscall CchatDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)” 从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast
在6.0中这样添加可以,在2005种要注意什么呢,怎么改,谢谢
带P表示是指针变量,不带P是一般变量。
(WPARAM,LPARAM)转换为LRESULT 前面带P,后面不带P,当然会出错。
函数声明时注意返回值为LRESULT,而不是void
哈哈,我也刚好遇到这种情况
借鉴了……
把返回值类型void 改成 LRESULT就可以了。
ON_MESSAGE(WM_RECVDATA,&CchatDlg::OnRecvData)
改成
ON_MESSAGE(WM_RECVDATA,OnRecvData)
[添加][景色]给复选框添加背景色的问题
08月 21st, 2008 by admin
Posted in VC/MFC | No Comments »
我的复选框是动态创建在一个工具栏中的。
m_chkAbnormal.Create( _T("阳性"), BS_AUTOCHECKBOX ¦ WS_VISIBLE ¦ WS_CHILD, rctSize, &m_wndToolBarText, CHK_ABNORMAL );
我尝试过子类化CButton成CButtonEx,并重载ON_WM_ERASEBKGND和ON_WM_CTLCOLOR.但是都看不到效果。
所以换了种方法,目前也正在尝试重绘CButtonEx,并在重绘中应用了背景色,但是重绘的背景色是有了,但是其他的东西都没了(除了背景色,左边的方框和文字都没了)。
现在不知道怎么继续下去了。我可以继续重绘普通CheckBox那个方框吗?它会起到CheckBox原有的那个效果吗?
或者,各位大侠还有什么更好的方法,希望能解惑。
万分感谢!
目前已经重载了DrawItem。 并且已经在里面成功的自绘了背景色,但是处理背景色,其他什么东西都没有了。
而CheckBox不同与普通的Button。 它的里面是有一个方框和文字的。这个方框,我不知道怎么处理了。
因为如果只是绘的话,它应该就没有的原来CheckBox的方框的那些功能了。
你想改的是控件的背景还是那个打勾的方格中的颜色?如果是控件的背景,只要在对话框类中响应WM_CTLCOLOR消息,判断是该控件时返回一个HRRUSH就可以了(例如:return ::CreateSolidBrush(RGB(255,0,0)))。
http://www.codeguru.com/cpp/controls/controls/checkboxcontrols/article.php/c5319/
谢谢各位大侠的帮助,虽然最后还是有些问题,但是已经看到希望了。
目前采用了laiyiling提供的网站中的方法,完全的重绘。
谢谢.
呵呵,我遇到的问题也是这样,学习学习
[mshflexgrid][单元][添加]关于mshflexgrid 单元格添加大量位图的问题
08月 6th, 2008 by admin
Posted in VC/MFC | No Comments »
我需要使用mshflexgrid 控件做一个表格,然后每个cell里面都添加一个不同的位图。
我的每个位图是根据读取别的文件的信息,然后在内存中临时创建的。
while(…)
{
Cbitmap bitmap…..
添加到cell….
保存指针到一个列表,以便退出时释放…
}
问题是我在程序退出前不能够释放我生成的这些位图,否则控件中相应的图就消失了。
有时需要显示30000个这样的位图到表格,可是我不释放先前的位图的话,gdi 不够了。。。。
请问有什么办法能够让我创建的位图存在于内存,但是释放gdi?
或者针对我得问题有其他办法?
如果有滚动条的话,
显示哪个加载哪个?不显示了就释放掉;再显示在加载
to hua_yang :我是想每次只显示一屏,不过这样会非常慢,我如果拖动滚动条,就会卡死,出问题。
to VisrSoft :切出来的小图,显示的时候,不耗费GDI么?
自己顶。
[添加][成员][变量]添加成员变量向导 出现了问题 请问该怎么解决
08月 4th, 2008 by admin
Posted in VC/MFC | No Comments »
vc添加控件的变量时显示:扩展程序提供程序未能为该对象返回扩展程序
。。。同楼上
如果用类向导有问题 试着手动添加 都是一样的了
可能是向导出问题了,不行就修复下VS的安装。
lz的意思是不是添加变量后,在使用变量时打上“.”号后没有哦提示?
看来诸位都没见过这个错误 没看懂你废什么话
我自己逐个手填了事
[何在][添加][text单元]如何在GUI上添加text单元 ~~~ 在线等
07月 31st, 2008 by admin
Posted in VC/MFC | No Comments »
我用下列两种方法都不行:运行后,文字输不进去。
1、m_vgctrl.NewUnit("text",1);
2、
CUnit Aunit1 = m_vgctrl.NewUnit( "Rect", 0 );
CSheet Asheet=m_vgctrl.GetActiveSheet();
double x1,y1,x2,y2;
x1=Aunit1.GetLeft();
y1=Aunit1.GetTop();
x2=Aunit1.GetWidth();
y2=Aunit1.GetHeight();
Asheet.DeleteUnit(Aunit1);
CUnit Aunit = Asheet.AddUnit( "text", x1, y1, x2, y2 );
[VC/MFC][添加][启动]VC/MFC如何添加启动界面
07月 31st, 2008 by admin
Posted in VC/MFC | No Comments »
我的程序启动时加载了很多库文件,所以运行后要等待好久才能出现主界面。我想让它能够有一个启动界面,当主界面完成后让启动界面消失,能够加上进度条自然最好,还有能做成例如GIF动态的等待界面吗?请大家赐教,谢谢!
如果是动态加载,可以在程序初始化的时候创建一个线程来显示,如果是静态加载,可以用加壳的方式把程序包在一个外壳里面,外壳程序显示加载界面,释放出真正的程序并创建进程。
不懂呀,太深奥了,什么叫动态加载,静态加载啊?
《VC深入详解》357页有详细介绍,去看看吧。
我试了试你说的动态加载,即开启一个线程去加载一个界面,我的启动界面是用一个对话框的,但是如何去结束这个对话框呢?怎么发送消息让它关闭?
网上有下的么?不想买呀,没钱呀~~要是你有麻烦发给我下,我的邮箱:wujz1985@163.com
先谢谢了
用事件对象吧,在主线程中创建事件对象,在启动界面线程中WaitForSingleObject,主线程加载完成后SetEvent
http://www.image2003.com/book/down/1921682911620074111627558496418.rar
上面是下载地址,191MB,是本好书,值得看。
我把这个类的代码,给你了,先是图片部分,你自己做了,因为我们有自己专用的模组了.所以你修改一下就可以了
.H文件:
// CG: This file was added by the Splash Screen component.
#ifndef _SPLASH_SCRN_
#define _SPLASH_SCRN_
// Splash.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// Splash Screen class
class CSplashWnd : public CWnd
{
// Construction
protected:
CSplashWnd();
// Attributes:
public:
// CBitmap m_bitmap;
// Operations
public:
static void EnableSplashScreen(BOOL bEnable = TRUE);
static void ShowSplashScreen(CWnd* pParentWnd = NULL);
static BOOL PreTranslateAppMessage(MSG* pMsg);
static CSplashWnd *GetWnd() { return c_pSplashWnd; }
static void HideSplashScreen();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSplashWnd)
//}}AFX_VIRTUAL
// Implementation
public:
~CSplashWnd();
virtual void PostNcDestroy();
protected:
BOOL Create(CWnd* pParentWnd = NULL);
static BOOL c_bShowSplashWnd;
static CSplashWnd* c_pSplashWnd;
// Generated message map functions
protected:
//{{AFX_MSG(CSplashWnd)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnPaint();
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
.cpp
// CG: This file was added by the Splash Screen component.
// Splash.cpp : implementation file
//
#include "stdafx.h" // e. g. stdafx.h
#include "resource.h" // e.g. resource.h
#include "Splash.h" // e.g. splash.h
#include "prestopm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
extern UINT IDM_CREATEDOCVIEW;
extern CPrestopmApp theApp;
/////////////////////////////////////////////////////////////////////////////
// Splash Screen class
BOOL CSplashWnd::c_bShowSplashWnd;
CSplashWnd* CSplashWnd::c_pSplashWnd;
CSplashWnd::CSplashWnd()
{
m_pSplash = NULL;
}
CSplashWnd::~CSplashWnd()
{
// Clear the static window pointer.
ASSERT(c_pSplashWnd == this);
c_pSplashWnd = NULL;
if(m_pSplash)
delete m_pSplash;
m_pSplash = NULL;
}
BEGIN_MESSAGE_MAP(CSplashWnd, CWnd)
//{{AFX_MSG_MAP(CSplashWnd)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CSplashWnd::EnableSplashScreen(BOOL bEnable /*= TRUE*/)
{
c_bShowSplashWnd = bEnable;
}
void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd /*= NULL*/)
{
if (!c_bShowSplashWnd)
return;
if(c_pSplashWnd != NULL)
{
c_pSplashWnd->KillTimer(1);
c_pSplashWnd->SetTimer(1, 25000, NULL);
return;
}
// Allocate a new splash screen, and create the window.
c_pSplashWnd = new CSplashWnd;
if (!c_pSplashWnd->Create(pParentWnd))
delete c_pSplashWnd;
else
c_pSplashWnd->UpdateWindow();
}
BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg)
{
if (c_pSplashWnd == NULL)
return FALSE;
// If we get a keyboard or mouse message, hide the splash screen.
if (pMsg->message == WM_KEYDOWN ¦ ¦
pMsg->message == WM_SYSKEYDOWN ¦ ¦
pMsg->message == WM_LBUTTONDOWN ¦ ¦
pMsg->message == WM_RBUTTONDOWN ¦ ¦
pMsg->message == WM_MBUTTONDOWN ¦ ¦
pMsg->message == WM_NCLBUTTONDOWN ¦ ¦
pMsg->message == WM_NCRBUTTONDOWN ¦ ¦
pMsg->message == WM_NCMBUTTONDOWN)
{
c_pSplashWnd->HideSplashScreen();
return TRUE; // message handled here
}
return FALSE; // message not handled
}
BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/)
{
char szFileName[MAX_PATH];
GetModuleFileName(NULL, szFileName, sizeof(szFileName));
*(strrchr(szFileName, '\') + 1) = NULL;
strcat(szFileName,"Resource\splash.bmp");
m_pSplash = new PIsm;
if(ISM_OpenImage2ISM(szFileName,m_pSplash,LMMT_ANY,NULL))
{
return CreateEx(0,
AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
NULL, WS_POPUP ¦ WS_VISIBLE, 0, 0, m_pSplash->GetImageWidth(),m_pSplash->GetImageHeight(),
pParentWnd->GetSafeHwnd(), NULL);
}
ASSERT(0);
return FALSE;
}
void CSplashWnd::HideSplashScreen()
{
// Destroy the window, and update the mainframe.
CWnd * pWnd = AfxGetMainWnd();
if (pWnd)
pWnd->SendMessage(IDM_CREATEDOCVIEW,NULL,NULL);
if (c_pSplashWnd) {
c_pSplashWnd->DestroyWindow();
}
}
void CSplashWnd::PostNcDestroy()
{
// Free the C++ class.
delete this;
}
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// Center the window.
CWnd wnd;
wnd.Attach(::GetDesktopWindow());
CenterWindow(&wnd);
wnd.Detach();
// Set a timer to destroy the splash screen.
SetTimer(1, 99000, NULL);
return 0;
}
void CSplashWnd::OnPaint()
{
CPaintDC dc(this);
CRect rect(0,0,m_pSplash->GetImageWidth(),m_pSplash->GetImageHeight());
ISM_DrawImage(&dc,m_pSplash,CPoint(0,0),this->m_hWnd,rect,0);
/*
TCHAR szPmIni[MAX_PATH], szPMName[MAX_PATH], szPMVer[MAX_PATH];
GetPMINIFileName(PM_INI, szPmIni, sizeof(szPmIni));
GetPrivateProfileString("ProductInfo", "ProductName", "", szPMName, sizeof(szPMName), szPmIni);
GetPrivateProfileString("ProductInfo", "ProductVersion", "", szPMVer, sizeof(szPMVer), szPmIni);
CString strVersion, strCopyRight, strCompany;
strVersion.Format("PageManager %s", szPMVer);
strCopyRight.Format("CopyRights %s. All rights reserved.", "2007");
strCompany.Format("NewSoft Technology Corporation %s.", "2007");
CFont labelFont;
// labelFont.Attach(::GetStockObject(DEFAULT_GUI_FONT));
labelFont.CreateFont(12,6,0,0, FW_NORMAL,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"Arial");
int nOldMode = dc.SetBkMode(TRANSPARENT);
CGdiObject *pOldBrush = dc.SelectStockObject(NULL_BRUSH);
CFont *pOldFont = dc.SelectObject(&labelFont);
int nX = 488, nY = 302;
CSize size = dc.GetTextExtent(strVersion);
int nSpace = size.cy;
dc.SetTextColor(RGB(0, 46, 122));
dc.SetTextAlign(TA_RIGHT);
dc.TextOut(nX, nY, strVersion);
dc.TextOut(nX, nY + nSpace, strCopyRight+strCompany);
//dc.TextOut(nX, nY + nSpace*2, strCompany);
dc.SelectObject(pOldFont);
dc.SelectObject(pOldBrush);
dc.SetBkMode(nOldMode);
labelFont.DeleteObject();
*/
}
void CSplashWnd::OnTimer(UINT nIDEvent)
{
// Destroy the splash screen window.
HideSplashScreen();
}
调用:CSplashWnd::ShowSplashScreen(this);
上面就是思路了,呵呵!
如果單純是因爲加載庫的原因引起延遲 用/DELAYLOAD開關看看
/DELAYLOAD (Delay Load Import)
Home ¦ Overview ¦ How Do I ¦ Linker Options
Syntax
/DELAYLOAD:dllname
This option causes delayed loading of DLLs. The dllname specifies a DLL to delay load. You can use this option as many times as necessary to specify as many DLLs as you choose. You must link your program with Delayimp.lib or implement your own delay-load helper function.
The /DELAY option specifies.
我试试……
主线程初始化完成后发消息关闭启动界面就可以了。
我用的是VS2005,已经没有splash控件了,所以还是要自己去弄啊……
你把源文件给我吧,#include "prestopm.h"这个头文件我没有啊,而且去掉后调试出了N多错误。我的邮箱wujz1985@163.com
又出现了一个新的问题:启动界面能够做好,并且是那种慢慢显示出启动界面的。在调试状态下即直接按F5或者ctrl+f5都没有问题,可以看到启动界面,但是直接双击运行生成的可执行文件时启动画面就不见了,这是什么原因呢?
是不是要读当前路径下的文件没找到?
1、利用组件库中的Splash Screen组件生成Splash1.cpp 和Splash1.h 这两个文件(也就是基于框架类的应用程序添加启动画面的步骤)
(1)用Photoshop等制作启动画面图像,保存为bmp格式。
(2)用Appwizard建一个基于单文档的工程Splash。
(3)在资源中插入位图资源
打开VC++的资源编辑器,用鼠标右键单击Resources文件夹,选择Import命令,插入所制作的位图。如果位图超过256色,VC会弹出一个对话框,提示位图已经插入但不能在位图编辑器中显示,确定即可。将位图ID改为IDB_SPLASH。
(4)添加Splash Screen控件
①选择菜单“project”/“Add To Project”/“Conponents and Controls”打开对话框,在列表框中双击“Visual C++ Conponents”选项,选择“Splash Screen”控件,然后单击“Insert”。
②确认或修改类名和位图资源ID,单击OK确认。
③编译、连接,漂亮的启动画面就显示出来了。
(5)如果需要改变启动画面的停留时间,就修改SetTimer()函数的第二个参数,默认是750 毫秒。该函数所在位置:
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
…
// Set a timer to destroy the splash screen.
SetTimer(1, 2000, NULL); //修改第二个参数以调整画面停留时间
return 0;
}
这样就生成了Splash1.cpp 和Splash1.h 这两个文件
2、制作基于对话框的应用程序启动画面
(1)建立基于对话框的工程Cover。
(2)文件移植
①将Splash1.cpp 和Splash1.h 两个文件从步骤一建立的工程拷贝到Cover工程中,并且分别加入到Source Files和Header Files中;
②导入位图文件到工程的资源中,改ID为IDB_SPLASH。
(3)修改代码,实现启动画面的调用
①添加CCoverApp 的InitInstance() 函数代码
#include "Splash1.h" //加在Cover.cpp文件的头文件调用部位
BOOL CCoverApp::InitInstance()
{
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);
…
}
②使用ClassWizard 添加OnCreate() 函数到对话框类CCoverDlg中,并修改代码#include "Splash1.h" //加在CoverDlg.cpp文件的头文件调用部位
int CCoverDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
…
CSplashWnd::ShowSplashScreen(this); //显示启动画面
…
}
3、使得启动画面消失后再显示主程序
①在CCoverDlg类中添加WM⭟TIMER消息响应函数
void CCoverDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
this->MoveWindow(300,300,600,400);
CDialog::OnTimer(nIDEvent);
}
② 在intCCoverDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)中添加如下代码:
CSplashWnd::ShowSplashScreen(this);
this->MoveWindow(0,0,0,0);
this->SetTimer(1,2000,NULL);//注意这个2000一点要等于步骤1中的2000
return 0;
③在void CCoverDlg::OnPaint()的末尾添加如下代码:
this->KillTimer(1);
http://blog.csdn.net/scq2099yt/archive/2008/03/27/2223575.aspx
思路了,你按照那个思路作就可以了,哪个是我们工程的头文件,你不必太多关注,也没有现成的给你,呵呵!
自己动手吧!其实也没有那么难的,呵呵!
只要简单的话 直接建立一个对话框,初始化开始时显示这个对话框,初始化结束销毁他
对话框的图片什么的自己加.
这样多简单
搜“闪屏”就可以找到合适文章。
good