2023/4/7
CRect类:
CRect有三个重载的构造函数:
CRect r(10, 20, 100, 200);
POINT p(10, 20);
SIZE s(100, 200);
CRect r(p, s);
POINT topLeft(10, 20);
POINT bottomRight(110, 220);
CRect r(p1, p2);
修改字体:
CFont m_cfont;
m_cfont.CreateFont(500, _T("宋体"));
m_textCtrl.setFont(&m_cfont);
将编辑文本框的输入设为水平居中:
CRect rcEdit;
m_textCtrl.GetClientRect(&rcEdit); //获得编辑文本框的矩形大小
TEXTMETRIC tm;
m_textCtrl.GetDC()->GetTextMetrics(&tm); //GetDC获得设备上下文的句柄,GetTextMetrics获取了文本字体的大小
int nFontHeight = tm.tmHeight + tm.tmExternalLeading; //tmHeight字符高度,tmExternalLeading两行之间空白的大小
int nOffY = (rcEdit.Height() - nFontHeight) / 4;
OffsetRect(&rcEdit, 0, nOffY); //设置rcEdit的位置信息
//wParam 通常用来存储小段信息,如,标志
//lParam 通常用于存储消息所需的对象
::SendMessage(m_textCtrl.m_hWnd, EM_SETRECT, 0, (LPARAM)&rcEdit); //给窗口发送消息,第一个参数选择窗口,第二个参数是需要的消息列表,第三个是wParam,第四个是lParam
输入字符串,对字符串进行运算:
首先将运算算法解耦成三个函数:
CString Calculate(CString pre, CString cur, char op)
CString CalculateFormula(CString formula)
CString CalculateFormulaWithBracket(CString formula)
第一个函数负责将一组CString Char CString进行运算得到CString; 第二个函数多次调用第一个函数,负责将没有括号的CString进行运算; 第三个函数通过压栈出栈,并且调用第二个函数及时运算单独括号内式子的方式将CString中的括号去掉,最后再调用一次第二个函数完成运算。
MFC的消息映射机制:
MFC的消息机制是消息与处理消息的函数一一对应。首先用户向操作系统发送消息,然后操作系统将消息排进消息队列,经过等待后响应程序得到消息(GetMessage()),应用程序会发送消息(不含组合键),如果有组合键,会先通过TranslateMessage()翻译消息,再到消息队列中重新排队,应用程序将消息传给操作系统执行消息。
除了没有基类的类和CObject的直接派生类,都可以生成消息映射表
MFC消息的组成:由消息值,WPARAM,LPARAM构成,消息值是一个无符号整数。
Windows消息分类:
1、标准Windows消息,WM_开头的除WM_COMMAND以外的所有消息。
2、命令消息,WM_CAMMAND,消息中附带了ID来区分是哪儿来的消息。
3、通知消息,一般由父窗口发送给子窗口,消息名也是WM_CAMMAND。
4、用户自定义消息,实际上就是定义一个宏作为消息,此宏的值应该大于WM_USER,然后就跟系统消息一样使用。
前三个属于系统消息,第四个属于用户自定义消息。
添加消息函数的三个步骤:
1、1.在类定义中加入消息处理函数的函数声明,注意要以afx_msg打头。例如MainFrm.h中WM_CREATE的消息处理函数的函数声明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);。
2.在类的消息映射表中添加该消息的消息映射入口项。例如WM_CREATE的消息映射入口项:ON_WM_CREATE()。
3.在类实现中添加消息处理函数的函数实现。例如,MainFrm.cpp中WM_CREATE的消息处理函数的实现:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
…
}