设置背景色
重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):
void CExampleDlgDlg::OnPaint()
{
if (IsIconic())
…
else
{
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景
// 这里还可以用moveto 和lineto 来给不同的区域画上不同的颜色
CDialog::OnPaint();
}
MFC添加位图按钮
方法1(加载资源图片):
O nInitDialog() 函数中添加
HINSTANCE hInstance;
HBITMAP hBitmap;
hInstance = ::AfxGetInstanceHandle();
hBitmap = ::LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1) ); //IDB_BITMAP1为添加图片资源ID
m_button1.SetBitmap(hBitmap);
方法2(加载非资源图片):
1.HBITMAP hBitmap;
2.hBitmap = (HBITMAP)::LoadImage(
3.NULL,
4."E://a.bmp", // 图片全路径
5.IMAGE_BITMAP, // 图片格式
6.0,0,
7.LR_LOADFROMFILE|LR_CREATEDIBSECTION);
MFC添加图标按钮
1.打开ICON按钮的属性页,在Style中选中Icon 。
2.ClassWizard加入这个成员变量: CButton m_ IconBtn;//对应于图标按钮
3.创建相应的图标或者位图资源:图标资源:IDI_ICONBUTTON
4.在初始化中加入如下代码:
…
//对应于图标按钮图标必须是.ico格式的
HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICONBUTTON);
m_IconBtn.SetIcon(hIcon);
资源ID出错,显示未定义
在出错的文件开头加一句:#include "resource.h"
不能将参数 1 从“const char [9]”转换为“LPCTSTR”
错误 2 error C2664: “CButton::Create”: 不能将参数1 从“const char [9]”转换为“LPCTSTR”
c:\users\hust\documents\visual studio 2010\projects\game\game\gameview.cpp 117 1 Game
解决方法:
Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。_T一般同字常数相关,如_T("Hello")。如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以以UNICODE方式保存。
p_MyBut->Create("打开文件"),
WS_CHILD | WS_VISIBLE | WS_BORDER,
CRect(40,10,200,60),
this,
IDB_BTN);
改成:
p_MyBut->Create(_T("打开文件"),
WS_CHILD | WS_VISIBLE | WS_BORDER,
CRect(40,10,200,60),
this,
IDB_BTN);
警告框
void CGameView::OnClickButton()
{
if (MessageBox(_T("确定退出系统吗?"),_T("提示"),MB_YESNO | MB_DEFBUTTON2) == IDYES) {
//获取当前主?窗口的句柄,向主窗口发送aWM_CLOSE消息
::PostMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_CLOSE,0,0);
}
//AfxMessageBox(_T("按钮被点到了!"));
//AfxMessageBox(_T("Are you sure?"),MB_YESNO|MB_ICONQUESTION); yes/no按钮,
}
改变窗口标题
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWndEx::PreCreateWindow(cs) )
return FALSE;
cs.style=WS_OVERLAPPEDWINDOW;//改变窗口标题的必要步
cs.lpszName=_T("比他帅");//改变窗口标题
return TRUE;
}
单文档创建ID时:
在资源视图中的String T able 中双击String T able ,在弹出的框中下拉至底,双击空白处新增
不同种类的控件应创建不同的类对象:
·按钮控件CButton (包括普通按钮、单选按钮和复选按钮)
·编辑控件CEdit
·静态文本控件CStatic
·标签控件CTabCtrl
·旋转控件CSpinButtonCtrl
·滑标控件CSliderCtrl
·多信息编辑控件CRichEditCtrl
·进度条控件CProgressCtrl
·滚动条控件CSrcollBar
·组合框控件CComboBox
·列表框控件CListBox
·图像列表控件CImageCtrl
·树状控件CTreeCtrl
·动画控件CAnimateCtrl
点击按钮切换对话框
要声明该对话框的局部变量
void StartGame::OnBnClickedButton1()
{
UpdateData(true) ;
CRunSquareDlg mCRunSquareDlg;//被调用类的对象
mCRunSquareDlg.DoModal();
UpdateData(false);
}
MFC 点击按钮显示和隐藏对话框
例子为非模态对话框,ID为ID_MODELESS,为其创建一个类:CModelessDlg
在父对话框(ID_FIRSTUI)的相应按钮写上事件(以IDCANCEL为例):
复制代码
void CFirstUIDlg::OnBnClickedCancel()
{
if (pDlg == NULL) // pDLG在父对话框的头文件中定义CModeless *pDlg;
{
// 指针为空则创建非模态对话框并显示
pDlg = new CModelessDlg;
pDlg->Create(IDD_MODELESS, this);
pDlg->ShowWindow(SW_SHOW);
}
else
{
// 判断对话框可见状态,可见点击后隐藏,隐藏则点击可见
BOOL bVisible = pDlg->IsWindowVisible(); //使用IsWindowVisible()时,需要指明对象。否则会导致指向当前对话框。
int nCmdShow = bVisible ? SW_HIDE : SW_SHOW;
pDlg->ShowWindow(nCmdShow);
}
}
void CRunSquareDlg::OnBnClickedButton1()
{ /* 显示模式对话框:
UpdateData(true) ;
StartGame mStartGame;
mStartGame.DoModal();
UpdateData(false);*/
//显示非模式对话框
StartGame *pDlg=NULL;
pDlg = new StartGame;
pDlg->Create(IDD_DIALOG1, this);
pDlg->ShowWindow(SW_SHOW);
}
类的继承方式
如class Student : public Person() {}
则父类Person中的成员变量,成员函数继承到Student后public的仍为public,private的仍为private,protected的仍为protected
而class Student : private Person() {}
则父类Person中的成员变量,成员函数继承到Student后,全部变为private