最近开始试着用MFC了!

最近开始学MFC,按自己的理解来写的,跟书上和网上有视频教程有所不同,没有使用向导:)感觉还不错!

通过一个小小的Notepad学习使用MFC中的一些类!

 

首先是编译预处理部分(包含文件,最后一行是为了让程序支持xp主题):

  1. #include <afxwin.h>
  2. #include <afxext.h>
  3. #include "resource.h"
  4. #pragma comment(linker,"/manifestdependency:/"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'/"") 

窗口类和应用程序类:

  1. class CNoteWnd:public CFrameWnd{
  2. public:
  3.     CEdit m_edit;
  4.     CMenu m_menu;
  5.     CButton m_btn;
  6.     CString m_fileName;
  7. public:
  8.     virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  9. public:
  10.     CNoteWnd(){
  11.         Create(0,L"文本编辑器");                         //创建文本框
  12.         CRect rect(0,0,0,0);
  13.         this->GetClientRect(rect);
  14.         m_edit.Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_MULTILINE|WS_VSCROLL,rect,this,100);        
  15.         
  16.         CFont* p_fnt=new CFont();                           //改变文本框的字体
  17.         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"新宋体"); 
  18.         m_edit.SetFont(p_fnt);      
  19.         m_edit.ShowWindow(0);                               //隐藏文本框
  20.         
  21.         m_menu.LoadMenuW(MAKEINTRESOURCE(IDR_MAINMENU));    //加载菜单
  22.         SetMenu(&m_menu);
  23.         rect.SetRect(0,0,80,30);                            //添加一个命令按钮
  24.         m_btn.Create(L"命令按钮",WS_CHILD|WS_VISIBLE|WS_TABSTOP,rect,this,101);
  25.         m_btn.SetFont(p_fnt);                
  26.     }   
  27. protected:
  28.     DECLARE_MESSAGE_MAP()
  29.     afx_msg void OnSize(UINT nType, int cx, int cy);
  30.     afx_msg void OnButton();
  31.     
  32. public:
  33.     afx_msg void OnOpen();
  34. };

设置窗口初始尺寸及应用程序初始化:

  1. BOOL CNoteWnd::PreCreateWindow(CREATESTRUCT& cs){       
  2.     cs.cx=600;  cs.cy=450;  cs.x=300;   cs.y=300;   
  3.     return CFrameWnd::PreCreateWindow(cs);
  4. }
  5. BOOL CNoteApp::InitInstance(void){
  6.     m_pMainWnd=new CNoteWnd();
  7.     m_pMainWnd->ShowWindow(m_nCmdShow);
  8.     return CWinApp::InitInstance();
  9. }

剩下的就是事件处理了:

  1. /*事件处理*/
  2. BEGIN_MESSAGE_MAP(CNoteWnd,CFrameWnd)
  3.     ON_WM_SIZE()
  4.     ON_COMMAND(ID_OPEN, &CNoteWnd::OnOpen)
  5.     ON_BN_CLICKED(101,&CNoteWnd::OnButton)
  6. END_MESSAGE_MAP()
  7. CNoteApp myapp;
  8. void CNoteWnd::OnSize(UINT nType, int cx, int cy){  
  9.     //改变窗口的大小
  10.     CRect rect(0,0,0,0);
  11.     this->GetClientRect(rect);      
  12.     m_edit.MoveWindow(rect);    
  13.     m_btn.BringWindowToTop();
  14.     m_btn.UpdateWindow();
  15. }
  16. void CNoteWnd::OnOpen(){    
  17.     CFileDialog cfd(TRUE,L"*.TXT",0,4,L"文本文件|*.txt||",0,0);
  18.     if(cfd.DoModal()==IDOK){
  19.         m_fileName=cfd.GetFileName();       
  20.         SetWindowText(m_fileName);
  21.         CFile txt(m_fileName,CFile::modeRead);
  22.         UINT l=txt.GetLength();
  23.         char* buf=new char[l+1];
  24.         buf[l]=0;
  25.         txt.Read(buf,l);
  26.         txt.Close();
  27.         CString tmp(buf);
  28.         m_edit.SetWindowTextW(tmp);     
  29.     }   
  30. }
  31. void CNoteWnd::OnButton(){
  32.     AfxMessageBox(L"点击按钮!");
  33. }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值