C++ 过场logo请教!!!
代码如下!装载的位图只是一闪而过,桌面做才能让他有几秒钟的等待啊??各位大侠帮帮忙!!!
HDC hDc;//主绘图设备
HDC hMemDC;//内存绘图设备
HBITMAP hBitmap;//位图句柄
BITMAP bmp;//位图结构
bool RenderWeitu = false;//是否渲染位图
int Loadbar=12;//位图条滚动
case WM_PAINT:
{
PAINTSTRUCT ps;
hDc = BeginPaint( hwnd, &ps);
// TODO: 在此添加任意绘图代码...
if(RenderWeitu == false)
{
//装载位图
hDc = GetDC( hwnd );//取得当前窗口的绘图设备
hMemDC = CreateCompatibleDC(hDc);//创建和主绘图设备兼容的内存绘制设备
hBitmap = (HBITMAP)LoadImage(NULL,"load.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);//装载位图
SelectObject(hMemDC,hBitmap);//将位图选到内存设备
GetObject(hBitmap,sizeof(BITMAP),&bmp);//取得位图的宽和高
BitBlt(hDc,0,0,bmp.bmWidth,bmp.bmHeight,hMemDC,0,0,SRCCOPY);//将内存设备中的内容翻转到主绘图设备,完成位图显示
ReleaseDC( hwnd,hMemDC);//释放内存绘图设备
//MessageBox(NULL,"HAHA","HEIHEI",MB_OK);
}
//装载位图
hDc=GetDC(hwnd);//取得当前窗口的绘图设备
hMemDC=CreateCompatibleDC(hDc);//创建和主绘图设备兼容的内存绘制设备
hBitmap=(HBITMAP)LoadImage(NULL,"laodbar.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);//装载位图
SelectObject(hMemDC,hBitmap);//将位图选到内存设备
GetObject(hBitmap,sizeof(BITMAP),&bmp);//取得位图的宽和高
MessageBox(NULL,"AA","BB",MB_OK);
BitBlt(hDc,12,200,bmp.bmWidth,bmp.bmHeight,hMemDC,0,0,SRCCOPY);//将内存设备中的内容翻转到主绘图设备,完成位图显示
ReleaseDC(hwnd,hMemDC);//释放内存绘图设备
EndPaint(hwnd, &ps);
RenderWeitu=true;
break;
return 0;
}
--------------------编程问答-------------------- WM_PAINT消息相应完,窗口马上又重画了,所以你的位图被清除了.用Sleep试试. --------------------编程问答-------------------- Sleep(time); --------------------编程问答-------------------- Sleep()
参数每1000是1秒
不过你的程序此时处于阻塞状态. --------------------编程问答-------------------- 用定时器也可以 --------------------编程问答-------------------- 把初始化的这段代码放到另外一个函数去执行
//装载位图
hBitmap = (HBITMAP)LoadImage(NULL, "load.bmp ",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);//装载位图
因为你的bitmap是Onpaint时才加载调用的。所以paint过之后又得重新来加载。
其实bitmap只需要LoadImage 一次就可以了 你不需要在Opaint里面不停的做
如果你想让你的bitmap加载一副不同的图片,你可以在另外一个函数执行,不用在paint里面初始化的。
你是想做闪屏是吧?
http://www.vckbase.com/document/viewdoc/?id=664 去这里看看。
很佩服你 竟然想到用写SDK自己实现一个。高手啊
补充:.NET技术 , VC.NET