VC++6.0_一个简单的图片按钮示例

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC++6.0 一个简单的图片按钮示例

VC++ 2008-11-26 17:07:37 阅读621 评论0 字号:大中小

用以下例子,说明如何在VC++6的对话框中添加一个图片按钮。

先给出运行的效果截图,图A为对话框最初加载,图B为鼠标单击时的效果。

图一,初加载对话框

图二,鼠标左键单击的效果

工程名为“TT”

此工程为基于对话框的,所以新建工程时,选择MFC AppWizard(exe)->基于对话框。

工程中有一个默认对话框,其ID为“IDD_TT_DIALOG”,其上有默认的“确定”“取消”按钮,在上面加一个按钮,ID就用默认的“IDC_BUTTON1”。

单击“样式”选项卡,修改其属性:

“所有者绘制”与“位图”前的复选框必须打勾。

接下来制作两个图标,分别对应按钮的两种状态,一是初始状态,二是单击状态。

从网上搜索两个图片,一般为jpg格式,先另保存为bmp,然后用PS进行处理,

将图片的模式改为索引模式,颜色为256,因为超过256将不能用VC++的图片编辑器加载。将两个图片引入工程中,ID都采用默认的吧。

在对话框类中添加成员变量,类型为CBitmapButton ,变量名为m_BitmapBtn,全局变量或局部变量均可。

!!不要这一行,删除!!!这个在对话框类的DoDataExchange函数中添加代码,DDX_Control( pDX, IDC_BUTTON1, m_BitmapBtn );

在对话框类的初始化函数中添加代码,m_BitmapBtn.LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2);

编译后运行,即成功。

以下给出代码片段供参考。

void CTTDlg::Do DataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Control( pDX, IDC_BUTTON1, m_BitmapBtn );//这句是我加的

//{{AFX_DATA_MAP(CTTDlg)

// NOTE: the ClassWizard will add DDX and DDV calls here

//}}AFX_DATA_MAP

}

BOOL CTTDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

m_BitmapBtn.LoadBitmaps(IDB_BITMAP1,IDB_BITMAP2);//这句是我加的

return TRUE; // return TRUE unless you set the focus to a control

}

注:在onInitDialog()的return之前加上m_BitmapBtn.SubclassDlgItem(IDC_BUTTON1,this);//关

联到按钮

m_BitmapBtn.SizeToContent();//函数使按钮适合图片大小

才能实现讲的效果

另外添加变量时在程序中定义一个CBitmapButton成员变量。

注意:不能使用ClassWizard为按钮映射一个CButton变量,然后改为CBitmapButton,

这么做并不能将按钮直接映射为CBitmapButton类的对象,反而会出现初始化错误

CBitmapButton m_btnX1;

定义变量,必须放在函数外面才能正常实现

手动加入的话,应该在DoDataExchange里将手动的它与控件资源相联系起来,加入DDX_Control(pDX, IDC_BUTTON3, m_btnX);

如下所示:

void CTestdlg1Dlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DA TA_MAP(CTestdlg1Dlg)

//}}AFX_DA TA_MAP

DDX_Control(pDX, IDC_BUTTON3, m_btnX);

}

相关文档
最新文档