《windows程序设计》有关位图在客户区显示的疑问

看到第五章位图那里,有一个程序是在客户区显示自定义的位图,我程序代码按照它的要求写了,可是运行出来,就是看不到位图,不知道怎么回事,请大家帮我看下,程序如下我只贴窗口函数... 看到第五章位图那里,有一个程序是在客户区显示自定义的位图,我程序代码按照它的要求写了,可是运行出来,就是看不到位图,不知道怎么回事,请大家帮我看下,程序如下
我只贴窗口函数中的代码:

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{

static HBITMAP hBitmap;
BITMAP bitmap;
static cxClient,cyClient,cxSource,cySource;
int i,j;
PAINTSTRUCT ps;
HDC hdc,hMemDc;
HINSTANCE hInstance;

switch(message)
{

case WM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;
hBitmap=LoadBitmap(hInstance,TEXT("IDB_BITMAP1"));
GetObject(hBitmap,sizeof(BITMAP),&bitmap);
cxSource=bitmap.bmWidth;
cySource=bitmap.bmHeight;
return 0;
case WM_SIZE:
cxClient=LOWORD(lParam);
cyClient=HIWORD(lParam);
return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
hMemDc=CreateCompatibleDC(hdc);
SelectObject(hMemDc,hBitmap);
for(i=0;i<cxClient;i+=cxSource)
{
for(j=0;j<cyClient;j+=cySource)
{
BitBlt(hdc,i,j,cxSource,cySource,hMemDc,0,0,SRCCOPY);
}
}

DeleteDC(hMemDc);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
DeleteObject(hBitmap);
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd,message,wParam,lParam);

}
}
展开
 我来答
恁呢呢呢嫩呢2W
2011-07-23 · 超过24用户采纳过TA的回答
知道答主
回答量:130
采纳率:0%
帮助的人:52.8万
展开全部
for(i=0;i<cxClient;i+=cxSource)
{
for(j=0;j<cyClient;j+=cySource)
{
BitBlt(hdc,i,j,cxSource,cySource,hMemDc,0,0,SRCCOPY);
}
}

上面这段换成下面代码试试:
BitBlt(hdc,0,0,cxSource,cySource,hMemDc,0,0,SRCCOPY);
若还看不到位图,那就检查位图是否有效地加载了
追问
我试了下,还是看不到位图,是不是有效加载怎么判断呢? 我是建立一个资源文件然后在里面插入一幅位图然后导入这样来做的。
追答
hBitmap这个句柄所指向的内存区是否有了位图数据,没有就是位图数据没有加载,有了就是刷新的问题或者说是响应WM_PAINT消息的代码有问题。
农靖海
2011-07-24 · TA获得超过3080个赞
知道小有建树答主
回答量:3016
采纳率:0%
帮助的人:0
展开全部
其实想学习VC++不用学习《windows程序设计》这门课程也可以,我当时就是一点计算机的基础也没有,就光会两指式打字,最后也学的挺好的,非要学的话建议你学学定时器、字窗口控件、位图和BITBLT、多任务和多线程、动态链接库就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式