孙鑫VC++深入详解(修订版)
文章平均质量分 74
sergery
这个作者很懒,什么都没留下…
展开
-
孙鑫VC++深入详解:Lesson7 Part1---模态对话框,非模态对话框,静态文本控件的访问
知识点: 在MFC中要对一个资源,就应该先为该资源创建一个关联的类,通过类的对象来操作该资源//----创建模态对话框CTestDlg dlg; dlg.DoModal();//----创建非模态对话框 CTestDlg *pDlg=new CTestDlg();pDlg->Create(IDD_DIALOG1,this);pD原创 2013-07-06 19:28:48 · 1563 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson1
1. 开始我从MSDN 中copy WinMain原型时,搞错了下面的代码编译是说 WinMain不能重载.....原来是参数不对. LPWSTR, 仔细宽字符串的指针,16位=2个字节=一个字wordLPCWSTR--- Pointer to a constant null-terminated string of 16-bit Unicode characters. For more原创 2013-07-02 16:09:43 · 1556 阅读 · 1 评论 -
孙鑫VC++深入详解:Lesson3
问题: 如果创建2个button则会运行时出错. 在Win32中,直接用CreateWindow()创建2个buttons时,只要ID不同没有任何任何问题, 但是这里就是不行.m_Btn.Create("按钮A",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,CRect(0,0,100,100),this,123); // 创建按钮123原创 2013-07-03 13:11:26 · 1860 阅读 · 0 评论 -
接下来的目标就是----孙鑫VC++深入详解(修订版)
买了孙鑫老师的书:孙鑫VC++深入详解(修订版),又有事干了!前面看了>Charles PetZold ,囫囵吞枣的过了一遍,对Win32编程有了些基本概念.接下来的目标就是----孙鑫VC++深入详解(修订版),争取快速过一遍.原创 2013-07-02 15:45:47 · 1822 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson4
------// DrawView.cpp : implementation of the CDrawView class//#include "stdafx.h"#include "Draw.h"#include "DrawDoc.h"#include "DrawView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_F原创 2013-07-03 22:40:25 · 1611 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson5 Part1 文本插入符Caret,位图插入符,窗口重绘
Lesson4,Lesson5都是在CXXXXView.cpp中干活,实际运行时那肯定得有个CXXXXView的对象来调用这些消息响应函数啊,这个对象在哪里创建的?//// TextView.cpp : implementation of the CTextView class//#include "stdafx.h"#include "Text.h"#include "Tex原创 2013-07-04 11:26:13 · 2278 阅读 · 1 评论 -
孙鑫VC++深入详解:Lesson5 Part2 路径层 CDC::BeginPath,BeginPath
5. 路径层 CDC::BeginPath,BeginPath 如何在Device Context中建立了一个路径层: 1)即调用BeginPath() 2)再调用其他的GDI绘图函数参数一个区域,如Rectangle生成一个矩形区域 3)调用EndPath() 产生闭环的路径层(即一个绘图区域) pDC->BeginPath();原创 2013-07-04 12:35:14 · 4760 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson6 Part1 -- CheckMenuItem,子菜单项上添加位图,禁用子菜单项,删除整个菜单,和加载菜单
//-- 1. 在菜单上加个子菜单TEST,然后在CMainFrame,CMenuApp,CMenuDoc,CMenuView这4个类中都添加响应WM_COMMAND命令消息的OnTest函数 测试表明 (1) 只会有一个OnTest能响应 (2)响应优先级 ,类的顺序是 CMenuView ---> CMenuDoc --->CMainFrame --原创 2013-07-05 09:41:11 · 4795 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson5 Part3 文字输入: 处理回车键,空格键,CFont的使用
字符输入: 把每次输入的字符保存到CString中,每输入一个字符,实际是整条字符串重新输出一次.1.在CTextView类中增加OnChar消息Handler2.需要一个CString 对象保存输入的字符串,在CTextView类中增加CString m_strLine私有成员 并在析构函数CTextView()中初始化为m_strLine ="";3.原创 2013-07-04 16:55:45 · 2171 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson6 Part2 -- MFC菜单更新机制 用该机制实现 Enable or Disable MenuItem
MFC菜单命令更新机制---用该机制实现 Enable or Disable MenuItem方法:1)用资源中的菜单项"剪切"的ClassWizard添加一个UPDATE_COMMAND_UI消息响应函数 void CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI) 同时发现MFC在MainFrm.cpp的消息映射代码处添加了原创 2013-07-05 12:22:20 · 5237 阅读 · 2 评论 -
孙鑫VC++深入详解:Lesson6 Part3 ---创建右键弹出菜单 TrackPopupMenu
1 -----增加右键弹出菜单方法一: Project-->Add to Project-->Components and Controls -->Visual C++ Components -->Pop-up menu 注意要加到View类中,不要加到Frame类中,因为Frmae被View覆盖,收不到鼠标消息.2 -----增加右键弹出菜单方法二: 模仿一,在鼠原创 2013-07-05 14:13:00 · 9811 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson5 Part4 屏幕字符串滚动输出,DrawText,SetTimer,WM_Timer消息
滚动字母,修改输出字幕颜色,定时器在onCreate中添加一个定时器,即SetTimer(1,100,NULL)再在类CDrawView中添加消息WM_TIMER的响应函数OnTimer每间隔100毫秒被调用OnTime()在OnTime()中用DrawText输出字符串,DrawText的输出宽度每次按照5像素宽度增加,随着矩形宽度增加,那么显示出来的字符串就逐步增加,效原创 2013-07-04 19:32:33 · 3660 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson6 Part4 ---CMenu 类的应用:添加子菜单项AppendMenu,插入子菜单项InsertMenu,删除菜单DeleteMenu
CMenu 类的应用 添加子菜单项AppendMenu,插入子菜单项InsertMenu,删除菜单DeleteMenu////------ 追加菜单,在已菜单后面追加一个子菜单 用函数CMenu::AppendMenu CMenu::AppendMenu BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lps原创 2013-07-05 17:44:50 · 17056 阅读 · 5 评论 -
孙鑫VC++深入详解:Lesson6 Part5--- 给自建的动态子菜单配置COMMAN消息响应函数
在MainFrm.cpp文件中的int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 中创建好子菜单: CMenu menu; menu.CreatePopupMenu(); //初始化对象menu --- 创建一个空的弹出菜单 GetMenu()->InsertMenu(2,MF_BYPOSITION|MF_POPUP,(U原创 2013-07-05 23:27:52 · 2424 阅读 · 1 评论 -
孙鑫VC++深入详解:Lesson9 Part8---给程序加个启动画面
方法:VC菜单栏: Project--->Add to Project--->Components and Controls 选择VISUAL C++ Components 找到Splash screen插入该组件后,工程中就增加了CSplashWnd 类,并在CMainFrame类的OnCreate函数中加了一条语句:CSplashWnd::ShowSplashScree原创 2013-07-13 16:56:05 · 2460 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson9 Part6---在状态栏中添加进度条
最直接的办法就是://------ 在OnPaint中创建....且窗口改变是重绘进度条. void CMainFrame::OnPaint() {CPaintDC dc(this); // device context for painting// TODO: Add your message handler code hereCRect rect;m_w原创 2013-07-13 14:29:24 · 1773 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson7 Part3---对话框伸缩功能的实现
//// 收缩按钮实现对话框伸缩功能void CTestDlg::OnButton2() { // TODO: Add your control notification handler code here CString str; if(GetDlgItemText(IDC_BUTTON2,str),str=="收缩<<") { SetDlgItemText(IDC_原创 2013-07-07 23:24:27 · 1533 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson7 Part4 ---对话框上各个控件之间循环接受回车键获得焦点
最终方案:是在OnOK()中循环改变对话框上的各个ITEM的焦点,而且这个方法不需要去定义EDIT的WndProcvoid CTestDlg::OnOK() {// TODO: Add extra validation hereGetNextDlgTabItem(GetFocus(),false)->SetFocus();// CDialog::OnOK(); //注释掉基类的On原创 2013-07-08 18:46:35 · 2346 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson8 Part1---"逃跑"按钮的实现
1. ClassWizard创建一个基于CButton的新类CWeixinBtn,然后利用ClassWizard增加类CWeixinBtn的成员和方法: (1)在该类中增加成员: 一个指针CWeixinBtn *m_pBtn (2)在该类中增加一个方法:OnMouseMove(),也就是增加一个鼠标移动到上面的消息响应函数 在该消息响应函数的实现代码中,隐藏自己原创 2013-07-08 21:36:38 · 1218 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson9 Part1---修改应用程序窗口
一. 在窗口创建之前修改: 要在MainFrame中的虚函数PreCreateWindow(CREATESTRUCT& cs)中修改CREATESTRUCT 修改窗口标题,2个步骤 step1:抹去窗口样式中的FWS_ADDTOTITLE,该样式是指示框架将文档标题添加到窗口标题中 cs.style &=~FWS_ADDTOTITLE;原创 2013-07-10 12:31:28 · 1191 阅读 · 0 评论 -
怎么样删除用ClassWizard创建的类?
1. 从硬盘上,项目目录下删除类的*.h和*.cpp文件.2.从FileView视窗中删除*.cpp和*.h//---如图,选选中后选择图标工具栏的剪刀//---但是,在ClassWizard中还是存在,导致重新再创建类时不得不用新的名称,怎么样才能从ClassWizard彻底删除?---原创 2013-07-09 13:41:22 · 1306 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson7 Part2---访问静态文本控件的七种方法
//--//------ 方式一 GetDlgItem/*GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10); num1 = atoi(ch1);num2 =atoi(ch2);num3 = num1+num2;itoa(n原创 2013-07-07 16:23:23 · 1871 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson8 Part3---如何让对话框捕获WM_KEYDOWN消息?
因为对话框程序中,某些特点的消息,如按键消息被Windows内部的对话框过程处理了,即基类完成了或者被发送给子控件处理,所以在对话框类中就不能捕获到按键消息解决办法:在子类中覆盖基类的特定消息过滤响应函数.在MFC中,用虚函数ProcessMessageFilter()来过滤或者响应菜单和对话框的特定Windows消息.在子类中覆盖它,接管消息响应.本例中,在CWinSun原创 2013-07-10 00:48:35 · 3116 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson8 Part2---属性表单
1. Insert-->Dialog 插入IDD_LARGER....3个 Style:Child, Disable2 分别给三个属性表单页Page1,Page2,Page3 用ClassWizard创建3个类,CPage1,CPage2,CPage33. 属性表单页CPropertyPage实际是要附加在CPropertySheet上才能显示 (1)CPropertyPage原创 2013-07-09 19:58:11 · 3081 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson9 Part2---修改窗口光标,图表,背景
一. 窗口创建之前修改,用自定义的窗口类WNDCLASS wc由于窗口的图标,光标,背景是在窗口类设计是指定的,因此要改的话,就自己定义一个WNDCLASS wc,按照自己的需要填充wc,并注册RegisterClass(&wc)1. 在MFC程序中,要修改出现窗口图表只能在框架类进行(CMainFrame)2. 要修改背景和光标,应该在视类中进行,在框架类修改则看不见原创 2013-07-10 17:59:28 · 2482 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson9 Part3---模拟动画图标
让应用程序标题栏的图标按照时间轮换思路:1) SetClassLong函数在窗口建成后调用图标文件(事先准备好3个图标文件),在OnCreate中处理2) 在OnCreate中放置一个SetTimer3)处理WM_TIIMER消息即OnTime函数知识点:用三种方法获取应用程序实例hInstance句柄1) AfxGetInstanceHandle()2)t原创 2013-07-10 22:02:36 · 1437 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson9 Part4---工具栏编程
//---1. 工具栏类CToolBar是CControlBar的子类,而CControlBar是CWnd的子类...因此工具栏是个窗口.1.将工具栏的图标的ID与子菜单项的ID设置成一样的,这样工具栏图标就可以响应子菜单项的消息.2. 将子菜单项目带勾:就是可以设置取消复选标记(勾).....添加UPDATED_COMMAND_UI消息即可.//----创建工具栏的过程:原创 2013-07-11 16:16:35 · 1644 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson9 Part7---在状态栏中显示鼠标的位置
1. 要在View中捕获WM_MOUSEMOVE消息,而不是在FRAME中,因为框架被VIEW类覆盖了.2. 在CMainFrame中 public:CStatusBar m_wndStatusBar; // 设置为public,一边view中访问四种方式:void CStyleView::OnMouseMove(UINT nFlags, CPoint point)原创 2013-07-13 16:31:48 · 2453 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson9 Part5---状态栏编程
1. CStatusBar也是一个窗口. CWnd-->CCtontrolBar-->CStatusBar 定义一个CStatusBar m_wndStatusBar对象,调用Create()函数创建进度条2. 在资源编辑器中增加2个字符串资源IDS_TIME 表示时间,IDS_PROGRESS 表示进度 把这个2个IDS增加到indicators[] static原创 2013-07-11 17:59:19 · 2032 阅读 · 0 评论 -
孙鑫VC++深入详解:Lesson6 Part6--- 电话本示例程序 动态添加子菜单 框架类窗口截获命令消息
//---//--一. 电话本设计思路:a. 在Veiw类中用 OnChar()响应客户区的输入 如 "Weixin 2666777",用空格隔开名称与电话b. 收到回车键时把每行输入保存到m_strLine,和m_strArray数组中,m_strArray要定义成public,因为MainFrame中要用c. 用"Weixin"创建动态子菜单.d. 响应菜单COMM原创 2013-07-06 15:07:45 · 2861 阅读 · 0 评论