15,979
社区成员
发帖
与我相关
我的任务
分享
void CWzdSplash::Create(HBITMAP hbit)
{
BITMAP bitmap;
GetObject(hbit, sizeof(bitmap), (LPSTR)&bitmap);
//CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDER,0,0,bitmap.bmWidth,bitmap.bmHeight,NULL,0);
CreateEx(0,
AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
NULL, WS_POPUP | WS_VISIBLE, 0, 0, bitmap.bmWidth, bitmap.bmHeight, NULL , NULL);
}
void CScreenWnd::CreatLjxWnd()
{
//建立大小与位图大小相同的窗口
CreateEx(0,
AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
"animatesplash",
WS_POPUP,
0,0,640,124, //不能采样Photoshop生成的jpg图片
NULL,
NULL,
NULL );
}
void CScreenWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
//*
//重画客户区颜色
CPen Pen;
CPen *pOldPen;
Pen.CreatePen(PS_SOLID, 1, RGB(0x85, 0x85, 0x85));
pOldPen = dc.SelectObject(&Pen);
CBrush brush;
brush.CreateSolidBrush(RGB(0x85, 0x85, 0x85));
CBrush* pOldBrush = dc.SelectObject(&brush);
CRect rc;
GetClientRect(&rc);
dc.Rectangle(&rc);
dc.SelectObject(pOldPen);
dc.SelectObject(pOldBrush);
//*/
//绘制公司标志
CRect rect;
GetClientRect(&rect);
int nX = 640;
int nY = 124;
CString strName; //文件名
// char cDir[255];
// GetCurrentDirectory(255, cDir); //取得程序目录
CString strAppPath;
// strAppPath.Format(_T("%s"), cDir); //程序目录
CString path0;
GetModuleFileName(NULL,path0.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
path0.ReleaseBuffer();
int pos = path0.ReverseFind('\\');
path0 = path0.Left(pos);
strAppPath = path0;
if (strAppPath.Right(1) == _T("\\"))
{
strName = strAppPath + _T("splash.jpg");
}
else
{
strName = strAppPath + _T("\\splash.jpg");
}
BOOL bFileExist; //检查标志图片是否存在
CFile file;
bFileExist = file.Open(strName, CFile::modeRead);
if (bFileExist)
{
file.Close();
}
else
{
return; //不存在返回
}
HANDLE hFile; //打开文件
if((hFile = ::CreateFile(strName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL)) != INVALID_HANDLE_VALUE)
{
//创建文件流
DWORD dwSize = DWORD(::GetFileSize(hFile, NULL));
ASSERT(dwSize != -1);
HGLOBAL hMemory = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
ASSERT(hMemory != NULL);
LPVOID pData = ::GlobalLock(hMemory);
ASSERT(pData != NULL);
DWORD dwCount;
::ReadFile(hFile, pData, dwSize, &dwCount, NULL);
::GlobalUnlock(hMemory);
IStream * pStream = NULL;
::CreateStreamOnHGlobal(hMemory, TRUE, &pStream);
ASSERT(pStream != NULL);
//从流中装入图片
IPicture * pPicture = NULL;
if(SUCCEEDED(::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture,(LPVOID*)&pPicture)))
{
// 向DC中绘图(右下角)
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pPicture->get_Width(&hmWidth);
pPicture->get_Height(&hmHeight);
pPicture->Render(dc, 0, 0, nX, nY, 0, hmHeight, hmWidth, -hmHeight, NULL);
pPicture->Release();
}
//释放流和文件
pStream->Release();
::CloseHandle(hFile);
}
}
//调用
CScreenWnd *s=new CScreenWnd; //建立一个新窗口对象
s->CreatLjxWnd(); //创建窗口
s->CenterWindow(); //在屏幕中央
s->ShowWindow(SW_SHOW); //显示窗口
s->UpdateWindow(); //更新窗口,激活OnPait函数
Sleep(2000); //等待函数指定秒钟
if (s!=NULL)
{
s->SendMessage(WM_CLOSE); //关闭窗口
}