VC开发细节小结

来源:互联网 发布:美工培训需要多少钱 编辑:程序博客网 时间:2024/06/05 12:06

遇到一些经典的东西(个人认为),在此做一个小记录。。

1。Mfc 对话框的移植

我们一直在苦恼mfc 可移植性太差,不方便团队开发,看了下面的介绍之后就不会这么想啦。

  步骤: 
  1、首先要生成一个*.ogx的文件。 
  
        方法:打开包含有所要加的对话框资源的工程(源工程)。 
                    在试图资源(ClassView)中鼠标右键点击所需的对话框的类(也可以是所需的类) 
                    这时,你会看到右键菜单中有个“Add   to   Gallery”的选项。 
  
                    选择这个选项,则*.ogx文件生成。 
                    生成的文件名会类似你的对话框的类名,只不过中间会多出的空格(这无关紧要) 
                    
                    关键是此文件生成在什么地方! 
                    一般情况下是: 
                    C:/Program   Files/Microsoft   Visual   Studio/Common/MSDev98/Gallery 
                    /源工程名     目录下 
  
  2、接着就是Insert这个*.ogx的文件。 
        也就是Insert这个对话框资源和这个对话框类 
  
        打开所要加入的工程(目的工程),选择 
        Project->Add   To   Project->components   and   controls... 
        这时打开的是一个对话框,默认的打开目录就是: 
        C:/Program   Files/Microsoft   Visual   Studio/Common/MSDev98/Gallery 
        在对话框中选择进入“源工程名”的目录,你就会看到那个     *.ogx的文件, 
        选择它,然后Insert.     最后关闭对话框。 
  
        这时你就会看到那个对话框的类已经出现在你的工程中, 
        再到资源ResourceView中的Dialog中看看吧,那个对话框的资源已经出现。 
  
        到这个时候,你所需要改动的就不是很多了。。。

 

2。CTime类获取当前时间,并将其格式化

用CTime类得到当前日期、时间、星期,格式化

① 定义一个CTime类对象 CTime time;

② 得到当前时间 time = CTime::GetCurrentTime();

③ GetYear( ),GetMonth( ), GetDay( ), GetHour( ), GetMinute( ), GetSecond( ), GetDayOfWeek( ) 返回整型(int)对应项目

④ 将当前时间格式化 CString date = time.Format("%Y-%m-%d %H:%M:%S %W-%A");

说明:

1) 结果为:2006-10-13 17:23:47 41-Friday

2) 格式符号说明

%a —— 星期(缩写英文),如Fri;

%A —— 星期(全写英文),如Friday

%b —— 月份(缩写英文),如Oct

%B —— 月份(全写英文),如 October

%c —— 月/日/年 时:分:秒,如 10/13/06 19:17:17

%d —— 日期(1 ~ 31)

%H —— 时(24小时制)(0 ~ 23)

%I —— 时(12小时制)(0 ~ 12)

%j —— 一年当中的第几天,(1 ~ 366)

%m —— 月份(数字 1 ~ 12)

%M —— 分(0 ~ 59)

%p —— 12小时中的A M/PM指示,或者AM,或者PM

%S —— 秒(0 ~ 59)

%U —— 一年中的第几周,星期日作为每周的第一天(0 ~ 53)

%w —— 星期(数字表示,0 ~ 6,0代表星期日)

%W —— 一年中的第几周,星期一作为每周的第一天(0 ~ 53)

%x —— 月/日/年,%c的前半段

%X —— 时/分/秒,%c的后半段

%y —— 年份(不带世纪,如 06)

%Y —— 年份(带世纪,如 2006)

更详细资料:http://hi.baidu.com/whenisee/blog/item/6a376f270113100a918f9d96.html

 

3。发送自定义消息

消息传递的方法一:使用ON_MESSAGE
使用ON_MESSAGE响应消息,必须配合定义消息#define WM_MY_MESSAGE (WM_USER+100)

一、对于发送消息者-MyMessageDlg,
①在其MyMessageDlg.h中,定义#define WM_MY_MESSAGE (WM_USER+100)
② 在其MyMessageDlg.cpp中要先添加:#include "MainFrm.h"  ,因为使用了CMainFrame*定义对象。
③并且要有测试消息的函数:
void MyMessageDlg::OnButtonMsg()
{
    // TODO: Add your control notification handler code here
    CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;  //先通过获取当前框架指针
    CView * active = pMF->GetActiveView();//才能获取当前视类指针
    if(active != NULL)  //获取了当前视类指针才能发送消息
    active->PostMessage(WM_MY_MESSAGE,0,0);   //使用PostMessage发送消息
}

二、对于消息的接受者-MessageTestView,
在其MessageTestView.h中

①也要定义#define WM_MY_MESSAGE (WM_USER+100)
②并定义消息映射函数-OnMyMessage()
protected:
 //{{AFX_MSG(CMessageTestView)
 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
在其MessageTestView.cpp中,
①先要声明响应消息:
BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
 //{{AFX_MSG_MAP(CMessageTestView)
 ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
 //}}AFX_MSG_MAP
②再添加消息响应的函数实现:
LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
 MessageBox("OnMyMessage!");
 return 0;
}

这样当执行OnButtonMsg()中的postmessage()时,会把此消息加到消息队列中等待响应。响应就会执行 OnMyMessage()内的代码,如果要立即响应此消息,则可以使用sendmessage()

更详细资料:http://blog.163.com/luxiaojun./blog/static/92132782008116111114914/

 

4。VC 对话框控件排序(Tab键改变焦点顺序)

当我们填写资料时,习惯用tab键,当利用VC制作对话框之后,怎样实现这个效果呢?

方法有两种:

一、界面操作

切换到对话框资源界面,按ctrl+d,出现数字标记后,按所要的顺序点击控件

工具栏-->布局(LayOut)-->Taborder(Ctrl+D)

二、修改代码

点击【文件】-->【打开】-->选择.rc文件,打开模式用text,找到begin 和 end之间定义的控件宏,改变顺序就OK了

 

5。MFC弹出文件或是执行文件

ShellExecute(m_hWnd,_T("open"),".//res//Bible.chm",NULL,NULL,SW_SHOWNORMAL);

 

6。VC的一些快捷键

ctrl+shift+F9   去掉工程内所有的断点 (当我们为了调试设了很多断点之后,此快捷键非常方便)

ctrl+F9  去掉当前页内断点

F9      去掉/添加光标所在行的断点

Ctrl+F10    DebugRunToCursor  调试并执行到光标所在行

Ctrl+L     剪切光标所在行

Alt+F8   为选择的代码规范格式