MFC的一些基本操作总结,比如操作字体,菜单,图片等

一:对控件上的字体操作
方法一:
CFont *pfont = m_heightvalue.GetFont();//m_heightvalue为控件
LOGFONT logfont;
pfont->GetLogFont(&logfont);
logfont.lfHeight = 100;
m_font.CreateFontIndirect(&logfont);
m_heightvalue.SetFont(&m_font);
方法二:

CFont m_newFont;
m_newFont.CreatePointFont(250,_T("隶书")); //
m_heightitle.SetFont(&m_newFont);
m_heightitle.SetWindowTextW(strTemp);

二:图行控件的操作:
CBrush newBrush;
CBrush *oldBrush;
CRect rect;
newBrush.CreateSolidBrush(RGB(255,0,0));
CClientDC cClientDc(this);
m_heightitle.GetWindowRect(&rect); //m_heightitle为图形控件
ScreenToClient(&rect);
oldBrush=cClientDc.SelectObject(&newBrush);
cClientDc.Rectangle(&rect);
cClientDc.SelectObject(oldBrush);
newBrush.DeleteObject();
三:改变控件的颜色:
添加消息响应:ON_WM_CTLCOLOR()
HBRUSH CDisplayValue::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

switch(pWnd->GetDlgCtrlID())
{
case IDC_STATIC_HEIGHTVALUE:
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(191,223,255));
pDC->SetTextColor(RGB(255,0,0));
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
case IDC_STATIC_HEIGHTTITLE:
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(191,223,255));
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
case IDC_STATIC_THICKNESSTITLE:
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(191,223,255));//SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
case IDC_STATIC_THICKNESSVALUE:
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(191,223,255));
pDC->SetTextColor(RGB(255,0,0));
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
default:
break;
}

return hbr;
}

四:窗口大小改变:
添加消息响应void CDebugCrtDlg::OnSize(UINT nType, int cx, int cy)
参数: nType 指定了要求的调整大小的类型。这个参数可以是下列值之一: · SIZE_MAXIMIZED 窗口已
经被最大化。
· SIZE_MINIMIZED 窗口已经被最小化。
· SIZE_RESTORED 窗口被改变了大小,但SIZE_MINIMIZED和SIZE_MAXIMIZED都不适用。
· SIZE_MAXHIDE 当其它窗口被最大化时,消息被发送到所有的弹出窗口。
· SIZE_MAXSHOW 当其它窗口被恢复到原来的大小时,消息被发送到所有的弹出窗口。

cx 指定了客户区域的新宽度。
cy 指定了客户区域的新高度。


五:访问txt文件
file.Open(m_strFilePath,CFile::modeRead);
char pbufRead[1024];
memset(pbufRead,0, sizeof(pbufRead));
file.SeekToBegin();
file.Read(pbufRead, sizeof(pbufRead));

访问excel文件:
http://bbs.csdn.net/topics/390481737

代码:E:c++CodeMMES_New_CodeWarehouseManagementcomV1.62
WarehouseManagementOutwarehouse.cpp

六:图标的操作:
从网上下载图象后,一般为.jpg格式,而MFC中图标格式为.ico格式,所以需要把.jpg格式转换为.ico格
式,一般百度在线都有操作直接转换方法。//一般宽和高为128*128

七:控件的位置改变和大小改变函数

用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置

void MoveWindow(int x,int y,int nWidth,int nHeight);
void MoveWindow(LPCRECT lpRect);
第一种用法需给出控件新的坐标和宽度、高度;
第二种用法给出存放位置的CRect对象;
例:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号
pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件
SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:
BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
第一个参数我不会用,一般设为NULL;
x、y控件位置;cx、cy控件宽度和高度;
nFlags常用取值:
SWP_NOZORDER:忽略第一个参数;
SWP_NOMOVE:忽略x、y,维持位置不变;
SWP_NOSIZE:忽略cx、cy,维持大小不变;
例:
CWnd *pWnd;
pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID号
pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按钮移到窗口的
(50,80)处
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把编辑控件的大小设为
(100,80),位置不变
pWnd = GetDlgItem( IDC_EDIT1 );
pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ); //编辑控件的大小和位置都改变
以上方法也适用于各种窗口。

八:wchar_t *类型 转为char *类型

wchar_t是宽字符类型,每个wchar_t类型占2个字节,16位宽。汉字的表示就要用到wchar_t 。
char,我们都知道,占一个字节,8位宽。

CString strName("listen");
char *pcstr = (char *)new char[2 * strName.GetLength()+1] ;

WideCharToMultiByte( CP_ACP,
0,
strName, // 要转换的wchar_t*
-1,
pcstr, // 接收char*的缓冲区指针
2 * strName.GetLength()+1, // pcstr的缓冲区的大小
NULL,
NULL );

宽字节和多字节转换:
http://www.doc88.com/p-335763678408.html (该网站中有简易方法)

九:添加菜单:
CMenu menu ,* pSubMenu; //定义下面要用到的cmenu对象
menu.LoadMenu(IDR_MENU1); //装载自定义的右键菜单
//获取第一个弹出菜单,所以第一个菜单必须有子菜单
pSubMenu = menu.GetSubMenu(0);
CPoint oPoint; //定义一个用于确定光标位置的位置
GetCursorPos( &oPoint); //获取当前光标的位置,以便使得菜单可以跟随光标
pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);

添加菜单后需要响应菜单:即添加该菜单ID对应的命令响应函数。

十:控制滚动条
wnd为控件或者窗口
wnd.SendMessage(WM_VSCROLL,SB_LINEDOWN)

十一:word的操作:
http://www.jizhuomi.com/software/341.html
该链接中简单操作了word

十二:文件的读取
CFile pCfile;
bool bResult=pCfile.Open(lpszPathName,CFile::modeReadWrite);
if (bResult!=FALSE)
{
pCfile.Read(m_str.GetBuffer(pCfile.GetLength()),pCfile.GetLength());
}
pCfile.Close();

原文地址:https://www.cnblogs.com/lishennan/p/4362946.html