#undef WINVER
#define WINVER 0x5000
#include <afxwin.h>
#include <Windows.h>
#include <Windowsx.h>
//全局变量定义区//
MSG msg;
HINSTANCE hInst;
HWND hWnd;
HDC hdc;
HDC mdc;
HBITMAP hbmp;
HBITMAP hbmp1;
RECT ClinetRect;
//****自定义绘画函数*********************//
void MyPaint(HDC hdc)//一般装载图片
{
BitBlt(hdc,0,0,600,450,mdc,0,0,SRCCOPY);//贴图
}
void MyPaint1(HDC hdc)//透明效果
{ BitBlt(hdc,100,100,600,450,mdc,100,0,SRCAND);//贴图
BitBlt(hdc,100,100,600,450,mdc,0,0,SRCPAINT);//贴图
}//****装载图片***************************//
void LoadMyImage(CString Image_name,int width,int height)
{
DeleteObject(hbmp);
hbmp=(HBITMAP)LoadImage(NULL,Image_name,IMAGE_BITMAP,width,height,LR_LOADFROMFILE);
if(hbmp==NULL)
{
AfxMessageBox("无法正确加载图片");
}
}
//****消息处理函数***********************//
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
switch(message)
{
case WM_CREATE:
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//AnimateWindow(hWnd, 500, AW_BLEND); //淡入图片0.5秒
MyPaint(hdc);
EndPaint(hWnd,&ps);
case WM_DESTROY:
DeleteDC(mdc);
DeleteObject(hbmp);
//AnimateWindow(hWnd, 500, AW_BLEND | AW_HIDE); //淡出图片0.5秒
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;}
//****定义及注册窗口类别函数*************//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)WndProc;//消息处理函数
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=NULL;
wcex.hCursor=NULL;
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszClassName=(LPCTSTR)"canvas";//类别名称
wcex.lpszMenuName=NULL;
wcex.hIconSm=NULL;
return RegisterClassEx(&wcex);
}//****初始化函数*************************//
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
hInst=hInstance;
hWnd=CreateWindow((LPCTSTR)"canvas",(LPCTSTR)"绘图窗口",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,600,450,NULL,NULL,hInstance,NULL);
if(!hWnd)
{
return FALSE;
}
MoveWindow(hWnd,200,200,600,450,true);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
hdc=GetDC(hWnd);
hbmp1=CreateCompatibleBitmap(hdc,600,450);
SelectObject(mdc,hbmp1);
mdc=CreateCompatibleDC(hdc);
LoadMyImage("仙剑启动画面.bmp",600,450);
SelectObject(mdc,hbmp);
/*MyPaint(hdc);*/ ??如果这里不添加这句话,为什么连图片都不显示出来,
LoadMyImage("恐龙.bmp",100,100);
SelectObject(mdc,hbmp);
MyPaint1(hdc);
ReleaseDC(hWnd,hdc);
return true;
}//****主程序*****************************//
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MyRegisterClass(hInstance);
//运行初始化函数//
if(!InitInstance(hInstance,nCmdShow))
{return FALSE;}
//消息循环//
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
#define WINVER 0x5000
#include <afxwin.h>
#include <Windows.h>
#include <Windowsx.h>
//全局变量定义区//
MSG msg;
HINSTANCE hInst;
HWND hWnd;
HDC hdc;
HDC mdc;
HBITMAP hbmp;
HBITMAP hbmp1;
RECT ClinetRect;
//****自定义绘画函数*********************//
void MyPaint(HDC hdc)//一般装载图片
{
BitBlt(hdc,0,0,600,450,mdc,0,0,SRCCOPY);//贴图
}
void MyPaint1(HDC hdc)//透明效果
{ BitBlt(hdc,100,100,600,450,mdc,100,0,SRCAND);//贴图
BitBlt(hdc,100,100,600,450,mdc,0,0,SRCPAINT);//贴图
}//****装载图片***************************//
void LoadMyImage(CString Image_name,int width,int height)
{
DeleteObject(hbmp);
hbmp=(HBITMAP)LoadImage(NULL,Image_name,IMAGE_BITMAP,width,height,LR_LOADFROMFILE);
if(hbmp==NULL)
{
AfxMessageBox("无法正确加载图片");
}
}
//****消息处理函数***********************//
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
switch(message)
{
case WM_CREATE:
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//AnimateWindow(hWnd, 500, AW_BLEND); //淡入图片0.5秒
MyPaint(hdc);
EndPaint(hWnd,&ps);
case WM_DESTROY:
DeleteDC(mdc);
DeleteObject(hbmp);
//AnimateWindow(hWnd, 500, AW_BLEND | AW_HIDE); //淡出图片0.5秒
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;}
//****定义及注册窗口类别函数*************//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)WndProc;//消息处理函数
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=NULL;
wcex.hCursor=NULL;
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszClassName=(LPCTSTR)"canvas";//类别名称
wcex.lpszMenuName=NULL;
wcex.hIconSm=NULL;
return RegisterClassEx(&wcex);
}//****初始化函数*************************//
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
hInst=hInstance;
hWnd=CreateWindow((LPCTSTR)"canvas",(LPCTSTR)"绘图窗口",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,600,450,NULL,NULL,hInstance,NULL);
if(!hWnd)
{
return FALSE;
}
MoveWindow(hWnd,200,200,600,450,true);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
hdc=GetDC(hWnd);
hbmp1=CreateCompatibleBitmap(hdc,600,450);
SelectObject(mdc,hbmp1);
mdc=CreateCompatibleDC(hdc);
LoadMyImage("仙剑启动画面.bmp",600,450);
SelectObject(mdc,hbmp);
/*MyPaint(hdc);*/ ??如果这里不添加这句话,为什么连图片都不显示出来,
LoadMyImage("恐龙.bmp",100,100);
SelectObject(mdc,hbmp);
MyPaint1(hdc);
ReleaseDC(hWnd,hdc);
return true;
}//****主程序*****************************//
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MyRegisterClass(hInstance);
//运行初始化函数//
if(!InitInstance(hInstance,nCmdShow))
{return FALSE;}
//消息循环//
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
解决方案 »
- 新手请教 DlL里创建进程的问题
- 不同风格的界面是如何用GDI画的?
- vs2008制作的ocx注册后没有VersionIndependentProgID,js如何调用?
- __events().Add(pEventer);这句怎么解读?
- 如何将使用调色板的图像数据存入CBitmap和HBITMAP??
- 哪里有BoundsChecker 7.2或更新版下载啊?
- 一个新新手的遭遇,郁闷的圣蛋节!
- 大数据量传输的问题!
- 请哪个高手能发给我一个bcgsoft的类库及源代码!
- 请教:新开子线程时CreateThread()与AfxBeginThread()有何区别?
- dll中替换主窗口的窗口过程
- domodal和WritePrivateProfileString冲突
还有,
LoadMyImage("仙剑启动画面.bmp",600,450);
SelectObject(mdc,hbmp);
/*MyPaint(hdc);*/ ??如果这里不添加这句话,为什么连图片都不显示出来,只是一个空白窗口,我的本意是先加载一张背景图,然后再加载一张恐龙的图片,如果这句话写上了,等一下背景图和恐龙图都出来了,但是窗口重画时,背景图就不见了?
LoadMyImage("恐龙.bmp",100,100);
SelectObject(mdc,hbmp);
MyPaint1(hdc);
这个时候会显示一次,又会发送一个WM_PAINT消息、然后由于WM_PAINT消息没有break;
所以会直接destroy掉。
/////
hdc=GetDC(hWnd);
hbmp1=CreateCompatibleBitmap(hdc,600,450);
SelectObject(mdc,hbmp1);
mdc=CreateCompatibleDC(hdc);
LoadMyImage("仙剑启动画面.bmp",600,450);
SelectObject(mdc,hbmp);
/*MyPaint(hdc);*/ ??如果这里不添加这句话,为什么连图片都不显示出来,
LoadMyImage("恐龙.bmp",100,100);
SelectObject(mdc,hbmp);
MyPaint1(hdc);
ReleaseDC(hWnd,hdc);
//////
这段应该写在WM_PAINT 消息里吧。
ZeroMemory(&msg,sizeof(msg));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Sleep(33);
MyPaint1();
}
}
把这些代码放上去替换掉你原来的while循环。