最近开始学MFC,按自己的理解来写的,跟书上和网上有视频教程有所不同,没有使用向导:)感觉还不错!
通过一个小小的Notepad学习使用MFC中的一些类!
首先是编译预处理部分(包含文件,最后一行是为了让程序支持xp主题):
- #include <afxwin.h>
- #include <afxext.h>
- #include "resource.h"
- #pragma comment(linker,"/manifestdependency:/"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'/"")
窗口类和应用程序类:
- class CNoteWnd:public CFrameWnd{
- public:
- CEdit m_edit;
- CMenu m_menu;
- CButton m_btn;
- CString m_fileName;
- public:
- virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
- public:
- CNoteWnd(){
- Create(0,L"文本编辑器"); //创建文本框
- CRect rect(0,0,0,0);
- this->GetClientRect(rect);
- m_edit.Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_MULTILINE|WS_VSCROLL,rect,this,100);
- CFont* p_fnt=new CFont(); //改变文本框的字体
- p_fnt->CreateFont( 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET , OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, L"新宋体");
- m_edit.SetFont(p_fnt);
- m_edit.ShowWindow(0); //隐藏文本框
- m_menu.LoadMenuW(MAKEINTRESOURCE(IDR_MAINMENU)); //加载菜单
- SetMenu(&m_menu);
- rect.SetRect(0,0,80,30); //添加一个命令按钮
- m_btn.Create(L"命令按钮",WS_CHILD|WS_VISIBLE|WS_TABSTOP,rect,this,101);
- m_btn.SetFont(p_fnt);
- }
- protected:
- DECLARE_MESSAGE_MAP()
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg void OnButton();
- public:
- afx_msg void OnOpen();
- };
设置窗口初始尺寸及应用程序初始化:
- BOOL CNoteWnd::PreCreateWindow(CREATESTRUCT& cs){
- cs.cx=600; cs.cy=450; cs.x=300; cs.y=300;
- return CFrameWnd::PreCreateWindow(cs);
- }
- BOOL CNoteApp::InitInstance(void){
- m_pMainWnd=new CNoteWnd();
- m_pMainWnd->ShowWindow(m_nCmdShow);
- return CWinApp::InitInstance();
- }
剩下的就是事件处理了:
- /*事件处理*/
- BEGIN_MESSAGE_MAP(CNoteWnd,CFrameWnd)
- ON_WM_SIZE()
- ON_COMMAND(ID_OPEN, &CNoteWnd::OnOpen)
- ON_BN_CLICKED(101,&CNoteWnd::OnButton)
- END_MESSAGE_MAP()
- CNoteApp myapp;
- void CNoteWnd::OnSize(UINT nType, int cx, int cy){
- //改变窗口的大小
- CRect rect(0,0,0,0);
- this->GetClientRect(rect);
- m_edit.MoveWindow(rect);
- m_btn.BringWindowToTop();
- m_btn.UpdateWindow();
- }
- void CNoteWnd::OnOpen(){
- CFileDialog cfd(TRUE,L"*.TXT",0,4,L"文本文件|*.txt||",0,0);
- if(cfd.DoModal()==IDOK){
- m_fileName=cfd.GetFileName();
- SetWindowText(m_fileName);
- CFile txt(m_fileName,CFile::modeRead);
- UINT l=txt.GetLength();
- char* buf=new char[l+1];
- buf[l]=0;
- txt.Read(buf,l);
- txt.Close();
- CString tmp(buf);
- m_edit.SetWindowTextW(tmp);
- }
- }
- void CNoteWnd::OnButton(){
- AfxMessageBox(L"点击按钮!");
- }