博文

谈VC控件的组合使用(2007-08-06 17:20:00)

摘要:Visual C++是一个基于windows平台的强大开发工具。它提供了大量的控件使程序员的工作变得简单而有效。控件是任何可视化开发工具的重要组成部分,使用它,可以很容易地编写具有windows标准界面风格的就用程序。但要使自己的程序界面丰富多彩,那就需要好好想想了,本文将介绍一种有效的方法——VC控件的组合使用。   例1:检查列表框   检查列表框在很多的安装程序中得到广泛使用,它的效果看起来是将一个检查框放入到一个列表框当中,比如win98安装附件程序时的窗口主体就是一个检查列表框,它的每一项由一行文本或一个小图标与前面一个检查框组成。下面就让我们来实现它。   实现思想:根据面向对象的方法,我们只需将一个检查列表框的类对象加入到欲含有检查列表框的窗口对象中,然后在窗口对象的初始化函数中绘制它。   具体步骤:   1.为你的应用程序添加一个对话框,ID值为IDD_MYDIALOUG,在“style”属性栏中将它的“owner draw”属性设为“Fixed”。   2.向该对话框中,加入一个列表框IDC_LBLISTDEMD   3.用Class wizard为列表框添加成员变量m_my_checkist,它的数据类型为CListBox。   4.找到添加的对话框的类定义处,将CListoBox类型改为CCheckListBox类型。   5.为对话框的WM_INITDIALOG消息添加消息处理函数,OnMylnlt并添加代码如下:   m_my_checklist.Addstring(_T("ITEM1"));   m_my_checklist.Addstring(_T("ITEM2"));   m_my_checklist.Addstring(_T("ITEM3"));   m_my_checklist.SetCheckStyle(BS_AUTO3STATE);   6.在需要的地方添加自己的弹出对话框代码。   7.编译运行即可。   例2:工具条中加入组合框   工具条是windows应用程序中不可缺少的部分,它方便了用户的操作,为熟练用户节省了宝贵的时间,熟练运用它是很重要的,VC的应用程序向导对基于单文档和多文档的应用程序提供了工具条支持,不过不直接支持组合框控件,而在我们常用的软件中,比如word,其处理字体,改变大小、型号都可直接用工具条上的......

阅读全文(3291) | 评论:0

关于VC++中,两种自定义消息的发送与接收的方法实现进行说明。(2007-08-06 16:59:00)

摘要:  说明:以下用一个自创的对话框类(MyMessageDlg)向视图类(MessageTestView)发送自定义消息为例,说明这两种不同方法的自定义消息的 总结:消息传递的方法一:使用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 D......

阅读全文(2754) | 评论:0

VC++中使用用户自定义消息及自定制窗口技巧(2007-08-06 16:56:00)

摘要: 主题:VC++中使用用户自定义消息及自定制窗口技巧 内容: Windows 应用程序所要做的每项工作几乎都是基于消息处理的, Windows 系统消息分为常用 Windows 消息,控件通知消息和命令。然而,有时我们需要定义自己的消息来通知程序什么事情发生了,这就是用户自定义消息。 ClassWizard 并没有提供增加用户自定义消息的功能,所以要使用用户自定义消息,必须手工编写代码。然后 ClassWizard 才可以象处理其它消息一样处理你自定义的消息。具体做法如下详解:     第一步:定义消息。一个消息实际上是开发 Windows95 应用程序时, Microsoft 推荐用户自定义消息至少是 WM_USER+100 ,因为很多新控件也要使用 WM_USER 消息。     第二步:实现消息处理函数。该函数使用 WPRAM 和 LPARAM 参数并返回 LPESULT 。     LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam){// TODO: 处理用户自定义消息 AfxMessageBox(" 处理用户自定义消息 "); return 0;}     第三步:在类头文件的 AFX_MSG 块中说明消息处理函数:    class CMainFrame:public CMDIFrameWnd{    ...    // 一般消息映射函数     protected:    // {{AFX_MSG(CMainFrame)    afx_msg int OnCreate(LP......

阅读全文(2474) | 评论:0

【转载】笔记:vc6.0添加自定义用户消息的基本过程(2007-08-06 16:33:00)

摘要: Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=16276 在学习<vc6.0技术内幕>过程中遇到要添加用户自定义消息的过程.我觉得书上写的比较散,于是就自己总结了这个基本过程,以为日后备查. 首先弄清楚两点:(1)谁要发送这个消息(2)谁要接受这个消息。 用一个简单的例子来说明。对象A向B(也可以就是A到A)发送消息。 1   发送消息 首先在A的头文件中定义这个消息: #define    WM_USERMESSAGE    WM_USER+30 所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数来表示的。A是向外发送消息的对象,因此在A的某个方法(函数)里就会调用用来发消息的函数B::SendMessage()/B::PostMessage(),因为是B接受消息,因此是如上的形式。 2   接受消息 对象接受一个消息,应该有三部分:在头文件中有该消息的处理函数的原型;在实现文件中有接受消息映射的宏; 以及该消息的处理函数的具体实现。 2.1   头文件中加上自定义消息的处理函数原型 在DECLARE_MESSAGE_MAP()语句之前,一对AFX_MSG之间加上如下形式的函数原型: afx_msg   LRESULT OnProcName( WPARAM wParam, LPARAM lParam ); 对Win32来说,wParam, lParam是传递消息最常用的手段。 2.2   在实现文件中加上接受消息映射的宏 在cpp文件里,BEGIN_MESSAGE_MAP语句之后,在一对AFX_MSG_MAP之间,增加 如下形式的代码: ON_MESSAGE(WM_USERMESSAGE, OnProcName) 上面是不用分号结尾的。 2.3   在实现文件中给出消息处理函数的具体实现。       VC++中自定义消息四步走完 开始用到自定义消息,找了半个小时,总结如下: 1、首先在用户类中声明自定义消息......

阅读全文(3387) | 评论:0

【计算机 - VC】VC中自定义消息的方法(2007-08-06 16:29:00)

摘要:/*创建自定义消息程序步骤:1:用ClassWard创建一个新project命名为:MessageTest2:此project选单文档,取消Active X支持,取消打印支持,其它默认。finish.3:在菜单中添加一个菜单“测试”其子菜单为"test",并映射其执行方法:OnTest4: 制造消息发送者:在资源中新增一个对话框,并用classward为其创建类名为TestDialog.然后在此对话框中加入一个Button,并用classward为其映射执行函数OnButton1()。5:在TestDialog.h文件中加入一行#define WM_MY_MESSAGE (WM_USER+100)用来定义自己的消息6:在TestDialog.cpp文件中加入一行:#include "MainFrm.h"7:为对话框的Button按钮加入发送消息代码如下:void TestDialog::OnButton1() {// TODO: Add your control notification handler code here//获取当前框架指针CMainFrame *pMainFrame=(CMainFrame *)AfxGetApp()->m_pMainWnd;//获取当前view指针CView *pView=pMainFrame->GetActiveView();if(pView!=NULL){pView->PostMessage(WM_MY_MESSAGE,0,0);}} 以上是对于消息的发送者工作己完成8:以下是对于消息接收者在MessageTestView.h中也要定义:#define WM_MY_MESSAGE (WM_USER+100)9:并在MessageTestView.h中定义消息映射函数如下:protected://{{AFX_MSG(CMessageTestView)afx_msg void OnTest();afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); //此处为自定义消息映射函数//}}AFX_MSGDECLARE_MESSAGE_MAP()10:在MessageTestView.cpp文件中,声明消息响应函数如下:BEGIN_MESSAGE_MAP(......

阅读全文(4370) | 评论:0

VC控件(2007-08-06 16:03:00)

摘要: VC学习笔记1:按钮的使能与禁止用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;则m_Button1.EnableWindow(true); 使按钮处于允许状态m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示 VC学习笔记2:控件的隐藏与显示用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。例1:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 );     //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_HIDE );     //隐藏控件例2:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 );     //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_SHOW );     //显示控件以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。VC学习笔记3:改变控件的大小和位置用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。void MoveWindow(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度、高度;第二种用法给出存放位置的CRect对象;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 );     //获取控件指针,IDC_EDIT1为控件ID号pWnd->MoveWindow( CRect(0,0,100,100) );     //在窗口左上角显示一个宽100、高100的编辑控件SetWindowPos()函数使用更灵活,多用于只......

阅读全文(4139) | 评论:1

VC入门的一条路 (2007-08-06 13:03:00)

摘要: 首先声明,我可不是什么高手,也就是刚脱贫。因为运气很好,买到了几本好书,在学习过程中几乎没走什么弯路,没费什么劲就入门了,现在一般的小程序能搞定了。看到那些因为不知从何下手而苦苦挣扎的朋友,希望我的文章能给他们一些帮助。      学编程急不得,上来就学VC肯定碰一头灰,说VC难就难在这点上了。如果硬上,意志坚强的话也许能挺过来,但也是会缺乏后劲,不得不回过头来补习基础知识。意志不坚强的话,很有可能就此放弃了,并留下一个VC难得不得了的印象。其实,只要踏踏实实一步一步来,VC也就是很简单点事。在这里我说一下,如果你还只是一个初中生,那么你就应当仔细考虑一下了。首先,限于你的知识和思维能力,学学C语言还应该没问题,但要学VC是要下相当大的功夫的。而且,你现在学到的东西将来一定会过时,所以不如把精力放在算法的研究上,毕竟这些东西永远都不会过时。            我觉着如果走对路子,入门VC,一个暑假应该够用了。      虽说学VC并不是传说的那么难,可不下些苦功夫是学不成的。在学VC前,你必须确定,你是因为热爱编程才学VC的,而不是出于炫耀或其他。否则,恐怕你坚持不到胜利的那一天。          对于首次接触编程的同学,我建议最好先学一下Quick BASIC(DOS里就有带,就是那个QBASIC.EXE),不用多学,知道什么是整型什么是浮点,以及DO...LOOP FOR...NEXT 等最基本的知识,能算个阶乘,求个积分就行了,关键要明白计算机是怎么执行命令的,对编程有个感性认识。如果你对自己有自信,也可以直接学C++,应该也不会多费太多事。不过我觉着因为有很多资料是FOR VB的,并且网页编程常用VB Script,以后你也很有可能要用到VB,所以了解一些BASIC对以后也是有帮助的。而且如果只是要算个小题用QB比VC、VB之类方便多了。(找个人教一两天应该就能搞定了吧)  &nb......

阅读全文(1882) | 评论:0

VC++ Studio使用技巧 (2007-08-06 13:02:00)

摘要: 1.检测程序中的括号是否匹配      把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。  2.查看一个宏(或变量、函数)的宏定义     把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的Go To Defition Of…),如果没有建立Browse files,会出现提示对话框,确定,然后就会跳到定义那些东西的地方。 3.格式化一段乱七八糟的源代码     选中那段源代码,按ATL+F8。  4.在编辑状态下发现成员变量或函数不能显示     删除该项目扩展名为.ncb文件,重新打开该项目。 5.如何整理ClassView视图中大量的类     可以在classview 视图中右键新建文件夹(new folder),再把具有相近性质的类拖到对应的文件夹中,使整个视图看上去清晰明了。 6.定位预处理指定     在源文件中定位光标到对称的#if, #endif,使用Ctrl+K。 7.如何添加系统中Lib到当前项目     在Project | Settings | Link | Object/library modules:输入Lib名称,不同的Lib之间用空格格开。 8.如何添加系统中的头文件(.h)到当前项目。       #include <FileName.h>,告诉编译到VC系统目录去找;使用#include "FileName.h",告诉编译在当前目录找。 9.如何在St......

阅读全文(1771) | 评论:0

新手留意 Visual C++的界面元素图解(2007-08-06 12:21:00)

摘要:在我们大量编程之前,我要花点时间讲述一下Developer Studio的界面,这样大家就统一口径了。你还将学习一些以前未曾用到过的新特性,例如,我们要考察一下工具条并介绍其中的某些新特性。如果你已经是一位经验丰富的Visual C++ 程序员,并且自认为没有什么界面元素对你来说还是新东西,那就没有必要在这里浪费时间了。  MFC Studio窗口元素   当使用Visual C++ 编辑程序时,你可以把Visual C++ 的显示界面划分成三块功能区:工具条、视图以及编辑窗口。每个功能区都可以独立于其它功能区来操作,因此,可以在各功能区之间自由地切换。图1.1显示了典型编辑器的显示情况以及这三个功能区的位置。  注释 本节中介绍各种窗口、视图以及工具条。随后的各节中介绍它们的详细信息。   经常用到的窗口有两种类型:文本窗口和资源窗口。  图1.1显示了一个典型的文本窗口。无论什么时候,当你要修改代码或编辑文本文件时,看到的就是这类窗口。  Visual C++ 通过各种手段来简化编码工作。文本窗口中首先注意到的东西是代码的颜色。例如,关键字的缺省颜色为蓝色,而注释的颜色为绿色。这种方式的彩色代码让你能够轻易地分辨出代码的性质。                             图1.1 Developer Studio的屏幕可以划分成三个功能区   本窗口的左边缘是一竖条,这是Visual C++ 放置各种符号的地方,你甚至会看到它通过颜色来区分数据和代码控制区。例如,当我们在代码中设置了断点后,Visual C++ 就在这个竖条上显示断点符号,当该断点可用时,断点符号为红色,否则,断点符号为白色。  文本框的各个区域中都可以通过右击来显示一个上下文相关菜单。上下文菜单中包含了可以进行基本操作的各种选项,与Developer Studio界面的其它地方不同,这些菜单不能直接进行修改。下图是右击文本编辑器时可能出现的上下文菜单的一个示例。请注意,你可以像使用任何编辑器那样剪......

阅读全文(3286) | 评论:0

学习VC++日记(总)(2008-12-19 16:18:00)

摘要:2007.8.6用了两天时间搞了配置和安装简单接触了一下对话框书上都可以掌握,勉强通过。   8.7,学习组合框, 先建立一public all变量,最好不用public ,但是刚接触没其他办法。   all=m_combox.GetCurSel();  CString str;     m_combox.GetLBText(all, str);  AfxMessageBox(str);   就可以实现简单的组合框选择数据项问题。 listcontrul那里用得少。   然后是了解自定义消息,消息映射估计怎么也花2天时间。   网上找的 #include <afxwin.h>#include "WMtest.h" CMyApp myApp; BOOL CMyApp::InitInstance(){ m_pMainWnd = new CMainWindow;  m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE;} BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd) ON_WM_PAINT() ON_WM_LBUTTONDOWN() file://增加消息映射 ON_MESSAGE(WM_MY_MSG,OnMyMessage)END_MESSAGE_MAP() CMainWindow::CMainWindow(){ Create(NULL,_T("The 1st MFC Application"));} void CMainWindow::OnPaint(){ CPaintDC dc(this); CRect rect; GetClientRect(&rect);} file://消息响应函数LRESULT CMainWindow::OnMyMessage(WPARAM wParam,LPARAM lParam){ AfxMessageBo......

阅读全文(7798) | 评论:4