随笔分类 -  VC++

MFC
摘要:PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码.MFC 消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,可以改变MFC的消息控制流程,甚至可 以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方 式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在 阅读全文
posted @ 2011-07-01 11:40 心随灵动 阅读(599) 评论(1) 推荐(0)
摘要:函数功能:该函数在指定位置显示快捷菜单,并跟踪菜单项的选择。快捷菜单可出现在屏幕上的任何位置。函数原型:BOOL TrackPopupMenu(HMENU hMenu,UINT uFlags,int x,int y,int nReserved,HWND hWnd,CONST RECT* prcRect);参数一览hMenu:被显示的快捷菜单的句柄。此句柄可为调用CreatePopupMenu创建的新快捷菜单的句柄,也可以为调用GetSubMenu取得的与一个已存在菜单项相联系的子菜单的句柄。uFlags:一种指定功能选项的位标志。用下列标志位之一来确定函数如何水平放置快捷菜单:TPM_CENT 阅读全文
posted @ 2011-06-30 20:52 心随灵动 阅读(2809) 评论(0) 推荐(0)
摘要:如果你有一定的C基础可能学起来比较容易些,但是学习C++的过程中又要尽量避免去使用一些C中的思想;平时还要多看一些高手写的代码,遇到问题多多思考,怎样才能把问题抽象化,以使自己头脑中有类的概念;最后别忘了经常上机自己调调程序,这是谁也代替不了的.C++类库介绍 再次体现了C++保持核心语言的效率同时大力发展应用库的发展趋势!!在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数 阅读全文
posted @ 2011-06-30 17:28 心随灵动 阅读(723) 评论(0) 推荐(0)
摘要:ON_COMMAND ON_MESSAGE ON_NOTIFY区别与联系ON_COMMAND是菜单和工具栏项处理消息的宏ON_MESSAGE是处理自定义消息的宏ON_NOTIFY 是控件向其父窗口发送消息处理的宏对这几个消息的理解要先了解一下Window消息的背景。在Windows3.1里,控件会将mouse, keybord等等的消息通知它的父窗口, 使用的消息就只有WM_COMMAND, 事件种类和控件ID被包含在wParam中, 控件的句柄包含在lParam中。由于wParam和 lParam已经满了,当控件要向父窗口发送其它特殊消息同时附带很多信息的时候就没有地方可以存放它们了。所以W 阅读全文
posted @ 2011-06-30 14:58 心随灵动 阅读(446) 评论(0) 推荐(0)
摘要:微软发布的dotnetfx2.0是相当成功的开发框架,由此产生了大量基于.NET2.0的应用,微软后来发布的dotnetfx3.0及dotnetfx3.5都是对2.0的扩展,并添加了很多新的特性(如:linq、wpf、wcf、wwf、Lambda、类型推断及简化的语法等),但碍于庞大的dotnetfx3.5安装部署都十分困难,dotnetfx2.0应用依然十分普遍。几个月以前微软发布了dotnetfx4.0,其强大的功能让dotnetfx2.0的优势消失殆尽,很多新的应用开发已经从.NET4.0开始了。由于.NET4.0使用全新的CLR,因此基于.NET2.0的程序集并不能直接在.NET4.. 阅读全文
posted @ 2011-06-29 20:56 心随灵动 阅读(1115) 评论(0) 推荐(0)
摘要:C++开发环境:1.Turbo CTurbo C是美国Borland公司的产品, 该公司在1987年首次推出Turbo C 1.0 产品, 其中使用了全然一新的集成开发环境, 即使用了一系列下拉式菜单,将文本编辑、程序编译、连接以及程序运行一体化, 大大方便了程序的开发。1988年, Borland 公司又推出Turbo C1.5版本, 增加了图形库和文本窗口函数库等, 而Turbo C 2.0 则是该公司1989年出版的。Turbo C2.0在原来集成开发环境的基础上增加了查错功能, 并可以在Tiny模式下直接生成.COM (数据、代码、堆栈处在同一64K 内存中) 文件。还可对数学协处理器 阅读全文
posted @ 2011-06-29 20:46 心随灵动 阅读(2391) 评论(0) 推荐(0)
摘要:1.在指定位置处创建一个CMFCTabCtrl,并给其添加4个CEdit,01CRect rectTab;02CEdit m_wnd1;03CEdit m_wnd2;04CEdit m_wnd3;05CEdit m_wnd4;06CMFCTabCtrl m_wndTab;0708m_wndTabLoc.GetWindowRect (&rectTab);09ScreenToClient (&rectTab);1011m_wndTab.Create (CMFCTabCtrl::STYLE_3D, rectTab,this, 1,12CMFCTabCtrl::LOCATION_TOP 阅读全文
posted @ 2011-06-28 14:38 心随灵动 阅读(4331) 评论(0) 推荐(0)
摘要:我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下:通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口。一个容易想到的方案是,处理鼠标消息WM_LBUTTONDOWN和WM_LBUTTONUP。在OnLButtonUp函数中计算鼠标位置的变化,调用MoveWindow实现窗口的移动。注意,拖动标题栏移动窗口的时候,会出现一个矩形框,它提示了窗口移动的当前位置。当鼠标左键放开的时候,窗口就移动到矩形框所在位置。而我们的实现方案中没有这个功能。要实现此功能,我们必须自己来画这些矩形。事实上,我们没有必要自己来做这件事情,因为 阅读全文
posted @ 2011-06-28 13:58 心随灵动 阅读(430) 评论(0) 推荐(0)
摘要:当你设计一个应用程序时,或许你希望用户能够通过客户区来拖动窗体,比如:当窗体没有标题栏或创建的是不规则的窗体时,就只有通过客户区来拖动窗体了。一个发生在我们身边很好的例子就是Microsoft Windows Media Player。Media Player有项功能是根据用户的爱好可以随意换掉外观(换肤),这个时候标题栏就隐藏了,但是你能够通过客户区来拖动窗体。首先必须了解Windows的消息传递机制,当有鼠标活动消息时,系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,同样地,若接受到的消息是 HTCLI 阅读全文
posted @ 2011-06-28 13:57 心随灵动 阅读(413) 评论(0) 推荐(0)
摘要:MFC CListCtrl的用法.Style/插入、删除、选中数据及排序问题等2010-02-05 19:04摘抄自:http://hi.baidu.com/fclshark/blog/item/650cbaa731b7619fd14358dc.html功能强大的CListCtrl:做网络笔记,还需添加修改CListCtrl改变行的颜色,列的颜色,字体颜色等.资源属性里面有个sort设置排序的,如果不小心选了Ascending,那么你insertItem的顺序就就1,10,11,12,13,14,15,16,17,18,19,2,20,21....所以要注意.首先使用下面的语句设置CListC 阅读全文
posted @ 2011-06-28 09:24 心随灵动 阅读(5057) 评论(0) 推荐(0)
摘要:CListCtrl控件使用方法总结 今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下:以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以 “ListView_”开头的一些宏。如 ListView_InsertColumn1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观的理解:windows资源管理器,“查 阅读全文
posted @ 2011-06-28 09:06 心随灵动 阅读(864) 评论(0) 推荐(0)
摘要:SendMessage、PostMessage原理本文讲解SendMessage、PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级、中级、高级程序员进行理解,三个步骤分别为:1、SendMessage、PostMessage的运行机制。2、SendMessage、PostMessage的运行内幕。3、SendMessage、PostMessage的内部实现。注:理解这篇文章之前,必须先了解Windows的消息循环机制。1、SendMessage、PostMessage的运行机制我们先来看最简单的。SendMessage可以理解为,SendMessage函数发送消息, 阅读全文
posted @ 2011-06-27 21:02 心随灵动 阅读(867) 评论(0) 推荐(0)
摘要:如果直接在线程里调用AfxGetMainWnd可能会出错,原因:_AFXWIN_INLINE CWnd* AFXAPI AfxGetMainWnd(){ CWinThread* pThread = AfxGetThread(); return pThread != NULL ? pThread->GetMainWnd() : NULL; }而AfxGetThread获取的是当前线程,而不是主线程!CWinThread* AFXAPI AfxGetThread(){// check for current thread in module thread stateAFX_MODULE_TH 阅读全文
posted @ 2011-06-27 20:12 心随灵动 阅读(870) 评论(0) 推荐(0)
摘要:关于在线程中使用AfxGetMainWnd()出错的问题.AfxGetMainWnd()得到的是当前线程的主窗口(如果有的话).因为主窗口是属于主线程的,所以想得到主窗口HWND值,只能在主线程中用AfxGetMainWnd(),但要不是处在主线程中,AfxGetMainWnd()可能是从当前线程查询主窗口的。但好像AfxGetMainWnd()不能跨线程,故要出错.要想在线程中使用主窗口的HWND值,可以把主窗口的HWND值传给线程.也可以用AfxGetApp()先取得主线程,再通过CWinThread的类成员m_pMainWnd获得主窗口(AfxGetApp()->m_pMainWn 阅读全文
posted @ 2011-06-27 20:11 心随灵动 阅读(3145) 评论(1) 推荐(2)
摘要:引用小甜鼠的CTreeCtrl中用右键选中item并弹出菜单的方法在csdn上看了几篇文章,自己正好派上用场,总结一下://获取到鼠标点中的位置POINT pt;GetCursorPos(&pt);UINT uFlags;//将屏幕坐标转化为客户区坐标ScreenToClient(&pt);MapWindowPoints(&m_ctrlClassTree, &pt,1);//获取鼠标点中位置的itemHTREEITEM hItem = m_ctrlClassTree.HitTest(pt,&uFlags);if ((hItem != NULL) & 阅读全文
posted @ 2011-06-27 15:58 心随灵动 阅读(686) 评论(0) 推荐(0)
摘要:首先定义右键消息函数: afx_msg void OnRBClick(NMHDR* pNMHDR, LRESULT* pResult); 然后在消息循环中定义消息对应关系: ON_NOTIFY(NM_RCLICK, ID_TREECTRL, OnRbClick) 接着定义消息函数内容: void OnRBClick(NMHDR* pNMHDR, LRESULT* pResult) { CPoint point; GetCursorPos(&point); CPoint pointInTree = point; m_TreeCtrl.ScreenToClient(&pointIn 阅读全文
posted @ 2011-06-27 15:56 心随灵动 阅读(1567) 评论(0) 推荐(0)
摘要:匈牙利表示法: 它通过在每一个表示符名字的前面放置一个数据类型助记符,为程序员提供了对标识符的即时识别。《1》MFC、句柄、控件及结构的命名规则。 Windows类型 样本变量 MFC类 样本对象 HWND hWnd CWnd* pWnd HDLG hDlg CDialog* pDlg HDC hDC CDC* pDC HGDIOBJ hGdiObj CGdiObject* pGdiObj HPEN hPen CPen* pPen HBRUSH hBrush CBrush* pBrush HFONT hFont CFont* pFont HBITMAP hBitmap CBitmap* pBi 阅读全文
posted @ 2011-06-27 11:42 心随灵动 阅读(253) 评论(0) 推荐(0)
摘要:这些关于SQLite与SQL差异的问题,你是否遇到过呢?笔者在这里为大家总结出了使用SQLite时,与SQL之间经常会出现的一些差异性问题,希望对大家的使用有所帮助。一、常见问题汇总1 TOP 这是一个大家经常问到的问题,例如在SQLSERVER中可以使用如下语句来取得记录集中的前十条记录: [pre]SELECTTOP10 *FROM[index]ORDERBYindexidDESC;[/pre]但是这条SQL语句在SQLite中是无法执行的,应该改为: [pre]SELECT*FROM[index]ORDERBYindexidDESClimit 0,10;[/pre]其中limit 0 阅读全文
posted @ 2011-06-15 10:31 心随灵动 阅读(2380) 评论(0) 推荐(0)
摘要:关于CString总结前言:串操作是编程中最常用也最基本的操作之一. 做为VC程序员,无论是菜鸟或高手都曾用过CString.而且好像实际编程中很难离得开它(虽然它不是标准C++中的库).因为MFC中提供的这个类对 我们操作字串实在太方便了,CString不仅提供各种丰富的操作函数、操作符重载,使我们使用起串起来更象basic中那样直观;而且它还提供了动态内 存分配,使我们减少了多少字符串数组越界的隐患。但是,我们在使用过程中也体会到CString简直太容易出错了,而且有的不可捉摸。所以有许多高人站过 来,建议抛弃它。 在此,我个人认为:CString封装得确实很完美,它有许多优点,如“容易使 阅读全文
posted @ 2011-06-14 22:08 心随灵动 阅读(317) 评论(0) 推荐(0)
摘要:参考文章如下:l网上流传甚广的一个大牛写的“关于CString的技巧”,没能找到原文,转载地址如下:http://blog.csdn.net/coolstar14/archive/2004/07/15/41885.aspxlCodeProject上一篇“CString Managment”地址: http://www.codeproject.com/KB/string/cstringmgmt.aspxlCodeProject上的FAQ里的一些解答:http://www.codeproject.com/KB/cpp/cppforumfaq.aspx#mfc_cstrtopcharlMSDN里关于 阅读全文
posted @ 2011-06-14 21:57 心随灵动 阅读(894) 评论(0) 推荐(0)