急,初学者关于动态加载位图的问题
我是一个VC的初学者,希望各位高手能帮帮我,我有好多问题啊
1.首先对于控件的ID我不大清楚他到底是什么,好像不能当变量名用,希望各位指导一下
2.我在窗体上放了一个图像控件(ID:PIC),类型Bitmap,在工程里有两幅位图资源,ID分别是Bitmap0和Bitmap1,我希望通过鼠标点击实现两幅位图的切换,如何实现?各位高手最好能给我写一下代码,谢谢了。
3.在添加成员变量时,我发现图像控件不能添加布尔变量,是这样么?高手能给解释一下么?
最后,谢谢大家,能不能推荐几本VC入门的书籍,我现在真的很需要,谢谢了。
问题点数:100、回复次数:9Top
1 楼aa3000(杀手K)回复于 2005-12-20 17:10:43 得分 0
ID用作标识资源,用 FindResource 等函数可以操作,
在鼠标事件写代码就可以切换图片
不明白 “图像控件不能添加布尔变量”是什么意思。
书嘛,我没看过。Top
2 楼bigdog942(zhiyuanhu)回复于 2005-12-20 17:26:41 得分 10
ID号就是标识资源,图片的变量定义HBITMAP hbmp;
我也是在学vc++的,你可以下载孙鑫的视频教学来看,说得特别的好,用emule来下载比较好
你在消息循环那,就是 while( msg.message!=WM_QUIT )或其他的语句
然后case那加入case VK_LBotton(虚拟键,鼠标左键):
.....
,其它代码就不细化了
.....
Top
3 楼happyparrot(快乐鹦鹉)回复于 2005-12-20 17:29:32 得分 20
1.首先对于控件的ID我不大清楚他到底是什么,好像不能当变量名用,希望各位指导一下
资源号就是控件的身份证。可以用GetDlgItem函数,根据控件的ID得到控件指针
2.我在窗体上放了一个图像控件(ID:PIC),类型Bitmap,在工程里有两幅位图资源,ID分别是Bitmap0和Bitmap1,我希望通过鼠标点击实现两幅位图的切换,如何实现?各位高手最好能给我写一下代码,谢谢了。
图像控件一般用来显示静态的图像。如果要动态变化,不如直接在对话框上画。当然,如果你只有两副图,还有个办法是放置两个图像控件,分别静态显示两个图像,两个控件在同一个位置,同时只显示其中的一个,也可以满足你的要求。
3.在添加成员变量时,我发现图像控件不能添加布尔变量,是这样么?高手能给解释一下么?
不能添加布尔变量,该控件不支持。
最后,谢谢大家,能不能推荐几本VC入门的书籍,我现在真的很需要,谢谢了。
谁便弄本VC编程指南之类的书,都可入门。入门之后才会有更多的选择,该看什么书。Top
4 楼Atomictry(天影)回复于 2005-12-20 17:48:27 得分 50
1. 一个控件对应一个ID, 系统通过这个ID来Create这个控件
3. 不支持,它是CStatic类
2.
// 这两个函数实现换图
// nCtrlID: picture控件ID, strFileName: 文件路径
void SetStaticBmp(UINT nCtrlID, CString strFileName)
{
HBITMAP hBitmap;
CStatic *pStatic = (CStatic *)GetDlgItem(nCtrlID);
hBitmap = (HBITMAP) LoadImage(AfxGetInstanceHandle(), strFileName, IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
pStatic->ModifyStyle(0xF, SS_BITMAP);
pStatic->SetBitmap(hBitmap);
}
// uBmpResource:图片资源ID; uCtrlResource: Picture控件ID
void SetStaticBmp(UINT uBmpResource, UINT uCtrlResource)
{
HBITMAP hBitmap;
CStatic *pStatic = (CStatic *)GetDlgItem(uCtrlResource);
hBitmap = (HBITMAP)LoadImage(
AfxGetInstanceHandle(),
MAKEINTRESOURCE(uBmpResource),
IMAGE_BITMAP,
0,
0,
LR_LOADMAP3DCOLORS);
pStatic->ModifyStyle(0xF, SS_BITMAP);
pStatic->SetBitmap(hBitmap);
}Top
5 楼MJose(Jose)回复于 2005-12-21 15:11:09 得分 0
谢谢Atomictry的帮助,我还有一个问题,对于一个Static控件,怎样编写他的鼠标响应?我用类向导建了消息BN_CLICKED的函数,并照你的代码写了,但是却没有反映
窗体上添加图像控件(ID:PIC),工程中包含两幅位图资源,ID分别是Bitmap0和Bitmap1,PIC终预先加载Bitmap0,希望通过一次鼠标点击,加载Bitmap1
代码如下:
void CInterfaceDlg::OnPICClick()
{
HBITMAP CurrentBitmap;
CStatic *pPIC;
pPIC=(CStatic *)GetDlgItem(PIC);
CurrentBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(Bitmap1),
IMAGE_BITMAP,
0,
0,
LR_LOADMAP3DCOLORS);
pPIC->ModifyStyle (0xF,SS_BITMAP);
pPIC->SetBitmap(CurrentBitmap);
}Top
6 楼wangjs720(听雨舟)回复于 2005-12-21 16:02:11 得分 0
汗...Top
7 楼MJose(Jose)回复于 2005-12-21 16:16:17 得分 0
小弟初学,很多都不懂,大家教教我啊Top
8 楼happyparrot(快乐鹦鹉)回复于 2005-12-21 16:24:23 得分 20
我用类向导建了消息BN_CLICKED的函数,并照你的代码写了,但是却没有反映
==需要将该Static控件属性中的NOTIFY属性选上。否则Static控件不响应任何消息。Top
9 楼MJose(Jose)回复于 2005-12-21 16:43:22 得分 0
谢谢happyparrot,确实是这样Top





