Window编程笔记(5)->从Win32过渡到MFC工程
发表时间:2020-10-18
发布人:葵宇科技
浏览次数:73
#include<afxwin.h> //MFC中的核心头文件、不需要添加Windows.h头文件。
//MFC: Microsoft Foundation Classes (微软基础类库)
C++类的形式,更方便的开发程序,把功能相近的一些Windows API函数、模块,一类的形式进行封装、统一管理:
好处:可以重用、代码数据更加严谨、提供程序员的开发效率。
MFC的发展:
缺点:想要去做好,非常漂亮的软件,耗时,耗力。
esayX: 它的封装,不是特别合理,没有以面向对象的思维来开发,个人开发,
轻巧duilib: 开源的,
Qt: C++类库,非常全面,非常丰富,提供的界面设计,非常方便
自己开发属于自己的界面库。
为什么还要去学习MFC: 可学习之处。
//MFC程序三部曲
1、建立CWinApp的派生类
2、重写InitInstance虚函数
3、定义CWinApp派生的全局对象
#include<afxwin.h>
#include"resource.h"
//对话框光联类,每一个类,光联一个对话框资源
Class CMainDlg::public CDialog
{
private:
HICON m_hIcon; //成员变量,图标句柄
public:
enum{IDD=IDD_MAIN_DLG}; //枚举,自己新建的对话框的属性名字
public:
CMainDlg(): CDialog(IDD_MAIN_DLG){}
//对话框初始化函数 //对话框生成了,只不过还没有显示而已
virtual BOOL OnInitDialog() //WM_INITDIALOG消息,类向导->重写虚函数
{
//设置对话框窗口标题
//::SetWindowText();
SetWindowText(L"我是小陈同学");
//修改程序的图标
//加载图标 hInstance
//MFC中如何获取实例句柄:
//1.AfxGetInstanceHandle();
//2.AfxGetApp()->m_hInstance;
//3.m_hIcon=AfxGetApp()->LoadIcon(IDI_CON1);
//1.m_hIcon=::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
//2.m_hIcon=::LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON1));
m_hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);//IDI_CON1需要在vs2003编辑器添加图标.ico
SetIcon(m_hIcon,TRUE); //小图标
SetIcon(m_hIcon,FALSE); //大图标
//MFC基本的一些数据类型,先弹出Afx对话框,弹出一个静态对话框
//一.字符串 CString
//C++ string
//CString str=L"这是第一个表达方式";
//AfxMessageBox(str);
//CString str1("这是第二个表达方式");
//AfxMessageBox(str1);
CString str2="Hello World";
//CString str2="我是中国人";
//CString str2;
int nlength=str.GetLength();//字符串中字符的个数
str2.Empty();//把str2里面的字符串清空
if(str2.IsEmpty()==TRUE)
{
//弹出对话框有两种表达方式
//第一种用: AfxMessageBox();
AfxMessageBox(L"程序异常");
//第二种用: ::MessageBox();
::MessageBox(NULL,L"程序异常",L"提示",MB_OK);
EndDialog(IDCANCEL);
}
else
{
::MessageBox(NULL,L"确定开启应用程序?",L"提示",MB_OK);
}
//wchar_t ch=str2.GetAt(2);
//wchar_t ch=str2.str2[2];
//修改字符,从第0个下标修改
//str2.SetAt(0,L'w');
//AfxMessageBox(str2);
//连接起来,str2的字符串+str5的L宽字符"->123",+=也是连接操作
CString str5=str2+L"->123";
str5+="456";
AfxMessageBox(str5);
//字符串截取:HelloWorld
//CString str3=str2.Mid(2,3);
//CString str3=str2.Left(5);
//CString str3=str2.Right(5);
//AfxMessageBox(str3);
//字符串大小写变换:小写变大写HelloWorld->HELLOWORLD=MakeUpper
//CString str3=str2.MakeUpper();
//大写变小写
//CString str3=str2.MakeLower();
//AfxMessageBox(str3);
//替换:1.把自身替换,每次做替换或者做其他功能时要弹一下方框
//str2.Replace(L"Hello",L"123");
//str2.Replace(L"1",L"0");:2.把当个字符替换:
//AfxMessageBox(str2);
//插入
//str2.Insert(2,'3');//从第二个单词插入一个3;
//AfxMessageBox(str2);
//删除
//str2.Delete(2,3);
//AfxMessageBox(str2);
//格式化
//int year=2020;
//int month=4;
//int day=20;
//CString str3;
//str3.Format(L"%d年%d月%d日 %s",year,month,day,L"22:00:00");
//CString str3 = L"C:\\Users\\Administrator\\Desktop\\FirstMFC\\FirstMFC\\res\\test.exe";
//str3 = str3.TrimLeft();
//str3 = str3.TrimRight();
//int pos=str3.Find('i',7);
//int pos=str3.ReverseFind('\\');//显示最后一个\\后面的内容
//if(pos!=-1)
//{
//str3=str3.Mid(pos+1);
//}
//AfxMessageBox(str3);
//wchar_t arr[100];
//wcscpy(arr,str3.GetBuffer());
//CPoint类 点
//POINT CPoint
//获取鼠标当前的坐标位置
//CPoint pt;
//GetCursorPos(&pt);
//CString str;
//str.Format(L"当前鼠标坐标:%d,%d,",pt.x,pt.y);
//AfxMessageBox(str);
//pt.Offset(-200,300);
//CSize 类大小
//CSize size(600,400);
//四。CRect 类 区域
//RECT 左,上,右和下四个符号
CRect rect(10,10,300,200);
int nwidth=rect.Width();
int nheight=rect.Height();
//IsRectEmpty
//两点 一条线,空区域
//IsRectNull 四个值,全为0
//rect.InflateRect(10,10);下,右各加10,上,左各减10, 0,210,0,310;
rect.DeflateRect(10,10);//上,左各加10,下,右各减10, 20,190,20,290;
//矩形正常化
CRect rect2(300,200,10,10);
rect.NormalizeRect();
//五。时间 CTime 类
CTime time=CTime::GetCurrentTime();
//第一个表达方式
//int nyear=time.GetYear();
//int nmonth=time.GetMonth();
//int nday=time.GetDay();
//int nminte=time.GetMinute();
//int nsecond=time.GetSecond();
//int ndayofweek=time.GetDayOfWeek();
//CString str4;
//str4.Format(L"当前时间:%d-%d-%d %d:%d:%d 星期%d",nyear,nmonth,nday,nminte,nsecond,ndayofweek);
//第二个表达方式
CString str4=time.Format(L"当前时间:%Y:%m:%d %H:%M:%S");
SetWindowText(str4);
return TRUE;
}
DECLARE_MESSAGE_MAP()
//控件响应
afx_msg void OnBnClicedOK();//双击按钮对话框控件,自动添加这段代码
};
//关联类
class CMyApp:public CWinApp
{
public:
//构造函数和析构函数可写可不写
CMyApp(){}
~CMyApp(){}
//看做是入口函数,MFC的所有代码都从这里开始
//InitInstance: MFC的初始化过程,启动管理
//目的:InitInstance->为了初始化应用程序,虚函数
virtual BOOL InitInstance()
{
//MessageBox:Window API
//:: 如果::的前面是没有类名来修饰,那么,表示调用的是全局函数,Windows API
//MFC里面的函数和Windows API里面的函数名字都是一样的
//::MessageBox(NULL,L"这是MFC程序",L"提示",MB_OK);
//AFX这个前缀,Application Framework,一个团队的名字
//Application Framework 技术团队
//凡是Afx开头的函数,都表示全局函数,都能再MFC工程中使用
//AfxMessageBox(L"这是我的一个MFC程序");
//第一个方法:CDialog dlg(IDD_MAIN_DLG);
//dlg.DoModal(); //弹出一个静态对话框
//第二个方法:
CMainDlg dlg; //弹出一个静态对话框
return TRUE;//TURE:表示初始化成功,返回FALSE表示关闭应用程序
//第一个对话框窗口
}
//负责清理操作,可写可不写
int ExitInstance()
{
return CWinApp::ExitInstance();
}
};
CMyApp theApp;
//WinMain函数无需再写,MFC已经在内部实现了WinMain函数了.
//int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR ipCmdLine,int nCmdshow)
//{
//MessageBox(NULL,L"这是Win32程序",L"提示",MB_OK);
//return 0;
//}BEGIN_MESSAGE_MAP(CMainDlg,CDialog)
//END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMainDlg,CDialog)
ON_BN_CLICKED(IDOK,&CMainDlg::OnBnClickedOK)
END_MESSAGE_MAP()
//点击按钮关闭程序
void CMainDlg::OnBnClickedOK()
{
//CDialog::OnOK();
if(IDOK!=NULL)
{
::MessageBox(NULL,L"点击确定按钮",L"提示",MB_OK);
}
else
{
EndDialog(IDCANCEL);
}
}
程序运行如图所示: