VC++ MFC 常用技巧

本文分享了作者在学习VC++ MFC过程中的心得与技巧,包括Afx全局函数的应用、字符串转换方法、窗口操作技巧等,旨在帮助初学者避免常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我现在学习VC++6.0 MFC 已经快两个月,初学MFC时的痛苦还记忆犹新。这两个月学习MFC可以说是一段坎坷的历程.在学校学习SDK时,我从来没有认真去听老师讲课。到了今天是多么后悔当初的行为,也不至于到今天是如此的狼狈不堪。

 

在这一段时间我总结了一些经常用到的技巧,和大家分享。让后学者,不至于为了解决某一个问题到处求救,还不一定得到满意的答案。

 

 

 

(-). 下面是常见的Afx全局函数:

 

AfxFormatString1:类似printf一般地将字符串格式化

 

AfxFormatString2:类似printf一般地将字符串格式化

 

AfxMessageBox:类似Windows API 函数 MessageBox

 

AfxOuputDebugString:将字符串输往除错装置

 

AfxGetApp:获得application object (CwinApp派生对象)的指针

 

AfxGetMainWnd:获得程序主窗口的指针

 

AfxGetInstance:获得程序的instance handle

 

 

 

(二). CString 与char []之间的转换. 

 

在VC中,恐怕这两个是经常要进行转换的吧

 

char str[10] = ”str”;

 

CString sstr = “sstr”;

 

sstr.Format(“%s”,str);

 

strcpy(str,(LPCTSTR)sstr);

 

 

 

(三). 关闭程序:

 

PostQuitMessage(WM_CLOSE);  或者PostQuitMessage(WM_DESTROY);

 

    更绝的是关闭所有的程序:::ExitWindows ();

 

 

 

(四). 在关闭窗口时,当要对文件进行保存时,可在这里添加函数:

 

    1.)在CMainFrame里的OnClose()里,用MessageBox("内容","标题",组合形式);组合形式可以查看MSDN的MESSAGEBOX( ) Function

 

    2.)在CXXXDoc::SaveModified() 里,只能用AfxMessageBox("");

 

不能用MessageBox()函数

 

 

 

(五). 如何修改窗体的标题:

 

    1.)修改主窗口的标题:m_pMainWnd->SetWindowText("你的标题");

 

    2.)如果在你的document类中进行改,则直接调用SetTitle("..."),如果在你的view类中改,则GetDocument()->SetTitle("...")

 

    3.)如果想使窗口的标题全部替换,则用:AfxGetMainWnd()->SetWindowText("你的标题");

 

 

 

(六). 得到窗体的标题:

 

    1.)AfxGetMainWnd()->GetWindowText(); 

 

   2.)先FindWindow()找到窗口的HWND,在GetWindowText();

 

 

 

(七). 在多文档/视图中:

 

    1.)子窗口的最大化:

 

      void CChildFrame::ActivateFrame(int nCmdShow)

 

      {

 

        // TODO: Add your specialized code here and/or call the base class

 

        nCmdShow=SW_MAXIMIZE;

 

        CMDIChildWnd::ActivateFrame(nCmdShow);

 

      }

 

 

 

2.)屏蔽子对话框:在APP类里把这两句话屏蔽掉

 

      if (!ProcessShellCommand(cmdInfo))

 

        return FALSE;

 

3.)关闭子窗口:

 

::SendMessage(::AfxGetMainWnd()->m_hWnd, WM_COMMAND,ID_FILE_CLOSE,0);

 

 

 

(八). 在装进自定义的光标后,在移动的过程中,鼠标的形状总是在自定义和默认的光标之间晃动,可以这样解决,在视中的PreCreateWindow()中加入如下几句:

 

     BOOL CXXXXView::PreCreateWindow(CREATESTRUCT& cs)

 

{

 

       // TODO: Modify the Window class or styles here by modifying

 

       // the CREATESTRUCT cs

 

       cs.lpszClass =AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,

 

                   (HBRUSH)::GetStockObject (WHITE_BRUSH),0);

 

       return CView::PreCreateWindow(cs);

 

}

 

 

 

(九). 怎样禁止改变窗口的大小和不能移动的窗口:

 

         再 CMainFrame的OnCreate函数中加入:

 

       CMenu *pTopMenu=GetSystemMenu(false);

 

         pTopMenu->RemoveMenu(4,MF_BYPOSITION);//最大化窗口不可用

 

       pTopMenu->RemoveMenu(2,MF_BYPOSITION);//size

 

       pTopMenu->RemoveMenu(1,MF_BYPOSITION);//使不可移动

 

 

 

(十).使窗口始终在最前方:

 

只要在App类中的InitInstance()函数中加入以下代码就可以了:

 

BOOL CwindowOnTopApp:: InitInstance()

 

{

 

   //此处略去了VC自动生成的代码

 

   m_pMainWnd->showWindow(SW_SHOW);

 

   m_pMainWnd->UpdateWindow();

 

   m_pMainWnd->SetWindowPos(&CWnd::WndTopMost,0,0,0,0,

 

SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);

 

      Return true;

 

}

 

以上都是我在学习过程中总结的,但这只是一小部分,有的是来自网友的回答,也有的是摘自论坛,也有的是摘自学习书籍,有的是自己摸索出来的。在这里感谢给过我帮助的人。等我上学之后,我会碌碌徐徐的总结出来,和大家分享编程的乐趣!欢迎大家和我联系:citychaser@163.com

 

待续………….

VC++视频笔记资料 一、MFC的概念和作用   1、什么是MFC?      全称:Microsoft Foundation Class Library(微软基础类库)      1-MFC从硬盘存在形式来说就是一个库(静态MFC库、动态MFC库)      2-MFC从原理来说还是一个程序框架   2、为什么使用MFC?      基于框架编程,提高工作效率,减少开发周期,降低开发成本。 二、几个重要的头文件   afx.h--包含了MFC中绝大部分类的声明   afxwin.h--包含了afx.h和windows.h   afxext.h--提供了对扩展类的支持,例如:工具栏、状态栏...   附:以Afx...开头的函数,可以确定为MFC库中的一个全局函数;     以::...开头的函数,可以确定为Win32的API函数; 三、MFC应用程序的分类   1、使用MFC库制作自己的控制台程序     相比Win32控制台程序:     多了一个全局对象 CWinApp theApp     入口函数不同于以往的入口函数   2、使用MFC库制作自己的静态库程序   3、使用MFC库制作自己的动态库程序     1--使用MFC库制作自己的规则动态库(静/动态MFC库)     2--使用MFC库制作自己的扩展动态库     区别:规则库可以被所有程序调用,扩展库只能被支持MFC的程序调用   4、使用MFC库制作自己的窗口程序     1--单文档视图构架程序       CFrameWnd-框架窗口类,封装了关于框架窗口的操作       CWinApp-应用程序类,封装了关于程序流程的操作       CDocument-文档类,封装了关于数据的操作(提取、转换、存储...)       CView-视图窗口类,封装了关于视图窗口的操作(绘图)      2--多文档视图构架程序       CMDIChildWnd-子框架窗口类,封装了关于子框架窗口的操作       CMDIFrameWnd-主框架窗口类,封装了关于主框架窗口的操作       CWinApp-应用程序类,封装了关于程序流程的操作       CDocument-文档类,封装了关于数据的操作(提取、转换、存储...)       CView-视图窗口类,封装了关于视图窗口的操作(绘图)     3--对话框构架程序       CWinApp-应用程序类,封装了关于程序流程的操作       CDialog-对话框窗口类,封装了关于对话框窗口的操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值