
VC/MFC
claider
这个作者很懒,什么都没留下…
展开
-
CComboBox使用的一点注意事项
在对话框编辑视图时,需要点击ComboBox右边的箭头,从而调整List的高度,否则可能在程序运行时高度过小而看不到下拉列表的内容; ComboBox有三种不同的Type,分别为:Simple /Dropdown /DropList。绑定Value变量时略有不同,前两者只可绑定到CString(表示当前字符串,注意不是List里面的,而是Edit里面的),后者绑定到int(表原创 2008-05-04 22:41:00 · 868 阅读 · 0 评论 -
改良TEAR实例抓取动态页面一则
ASP的动态网页中通常有一种写法:1、服务端和浏览器连接后,建立一个session(此处指asp语法中的session对象),用来保存一些变量。2、请求此类动态页面时,先行GET一个带参数的URL,形如:http://www.yoursite.com/xyz/session_id.asp?id=7413、而后服务端再生成一个页面,该页面每次URL相同,但内容根据上一步带过来的参数值而不同。url形原创 2007-05-11 10:21:00 · 1278 阅读 · 0 评论 -
CMainFrame::PreCreateWindow函数中WS_CLIPCHILDREN属性的修改需要慎重!
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)...{ if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying cs.cx = 350;原创 2007-04-25 16:16:00 · 1894 阅读 · 0 评论 -
OnCtlColor/WM_CTLCOLOR与OnDrawItem/WM_DRAWITEM的一点关系
联系:二者均由父窗体内重载,但改变的确是子窗体的显示细节区别一、前者只能改变颜色 ,后者可自定义更多细节区别二、后者所施加的空间必须为Owner Draw区别三、前者不能作用于Button参考文献:《白乔原创:VC之美化界面篇》原创 2007-04-24 13:46:00 · 2728 阅读 · 0 评论 -
OnCtlColor/WM_CTLCOLOR对于Static控件有效而对于Button无效
似乎微软改变了主意:http://www.80diy.com/home/20010908/12/277821.html重载OnCtlColor只能改变窗体和STATIC的颜色,而对于Button则不行。而对于STATIC起作用的代码,对于CheckBox也有作用。其他参考链接:http://www.21cnvip.com/csdn/html/20051222/09/4474129.html原创 2007-04-24 11:33:00 · 4930 阅读 · 0 评论 -
透明CheckBox
在类似MSN Messenger的Log in界面上同样需要透明的checkbox ,与透明Static相近,重载OnPain()。但此处需要自行绘制chebox的小方框,并空出其位置后绘制文字。DrawFrameControl可绘制小方框,而15像素差不多是个比较好的绘制举行宽度,同理,可在控件左侧开始20个像素处开始绘制文字为佳。void CTransCheck::OnPaint() {原创 2007-04-20 09:00:00 · 2510 阅读 · 0 评论 -
WS_CLIPCHILDREN与WS_CLIPSIBLINGS
英文单词解释clip:夹子、子弹夹、回形针;夹住,修剪sibling:同胞兄弟或姐妹overlapped:重叠这两个Window Stype的特性与异同素来不太清楚,今日作一笔记:MSDN的解释为:WS_CLIPCHILDREN Excludes the area occupied by child windows when you draw within the parent wind原创 2007-04-18 20:51:00 · 3507 阅读 · 1 评论 -
WM_DRAWITEM/CWnd::OnDrawItem
一直以来闹不清楚WM_PAINT和WM_DRAWITEM有什么关系,前者不必多言,后者在自绘控件的相关帖子中被频繁提及。今日 经过试验以及参考MSDN得出:WM_DRAWITEM均被控件的父窗体调用和处理。举简单例子如下:Project有三个主要的类:1、CApp theApp2、CDialog Dlg3、CMyButton Btn;//其parent为dlg 若要自绘按钮CMyButton原创 2007-04-18 19:55:00 · 3485 阅读 · 1 评论 -
解决问题:ASSERT in Wincore.cpp ,line 884
Project A.dll有如下相关结构与接口:(伪VC代码)Class CChildView : public;Class CMainFrame {… CChildView m_wndView; …};CMainFrame::ShowDialingPad(){ CMyDialog * pDlg=new CMyDialog();pDlg->原创 2007-04-11 09:33:00 · 4026 阅读 · 0 评论 -
VC编译多个相关Project方法点滴(再续)
有一种情况会引起故障,倘若某个dll引用了其他的other.dll,则需要把 ohter.dll拷贝至/output下。否则出现如下状况:有工程A,输出为A.dll;工程B输出为B.exe。经设置,将二工程输出的dll和exe均放到../Debug/目录下。且将工程A调试调用的Executable for debug sessions设置为../debug/B.exe。 很奇怪的是:原创 2007-04-09 17:39:00 · 1898 阅读 · 1 评论 -
TabCtrl控件的使用一则——程序架构
传统地,Tab控件在切换Tab页时,需要切换页相对应的子窗体的隐藏与显示。单独对子窗体控制,略显繁杂。本文采取如下思路: 将诸子窗体放到某个承载窗体(比如CWnd类型或者CDialog类型对象)上,在Tab切换时,操控承载窗体的显隐即可达到目的。又传统地,程序需要维护一个对象数组,每个对象用于维护Tab和承载窗体或子窗体之间的关系;而本文采取如下方法:利用TCITEM结构体的lParam字原创 2007-04-06 14:56:00 · 4491 阅读 · 4 评论 -
miranda中Service与Event机制分析结果
经分析,得出如下结论:Service: Function 与name为一对一的关系,可以凭借name在全局范围内调用function Event: Event与 name为 1:1的关系,但是Event和Fucntion之间为n:1的关系。每调用一次HookEvent(name, func)则将func加到名为name的event的队列的末尾。每调用一次CallHo原创 2007-08-14 20:41:00 · 1257 阅读 · 0 评论 -
VC7/8的工程移至VC6时碰到的warning C4005: '_WIN32_WINDOWS' : macro redefinition及其解决
将高版本VC(2005/2003)的工程移至VC6下时,经常碰到:warning C4005: _WIN32_WINDOWS : macro redefinition 解决方法:以VC6生成的stdafx.h替代高版本VC的同名文件。原创 2007-05-17 12:49:00 · 5936 阅读 · 0 评论 -
复制文件夹, Copy a directory to destinate path.
////folder copy/////////////SHFILEOPSTRUCT so;//for direct copy//global varientso.hwnd=hWnd;so.wFunc=FO_COPY;so.pFrom="C://test//mfcdll";so.pTo="C://mfcdll";so.fFlags=FOF_ALLOWUNDO|FOF_SIMPLEPROGRE原创 2007-05-28 11:53:00 · 1499 阅读 · 0 评论 -
重载CDataGrid的函数以响应消息
Ctrl+w在Wizard里面于class name设置datagrid所在的对话框,在Object IDs选择IDC_DATAGRID1,在messages里面选择需要响应的消息,Wizard会自动添加如下代码:BEGIN_EVENTSINK_MAP(CGridTestDlg, CDialog) //{{AFX_EVENTSINK_MAP(CGridTestDlg) ON_E原创 2008-05-04 21:13:00 · 779 阅读 · 0 评论 -
ADO EXTENTSION 绑定 recordset时注意变量长度的问题
TCHAR m_ch_Gender[1];显然有很大问题,长度至少应该为2,否则仅有的一位被用来放‘/0’,这样就什么值也获取不到。该字段无法接受值,进而可能造成Update整个记录无效 。也引发0xE06D7363: Microsoft C++ Exception 所以似乎绑定变量的长度要比实际数据库字段的长度多一原创 2008-04-20 08:22:00 · 713 阅读 · 0 评论 -
ADO EXTENTSION 绑定 recordset时注意冗余变量问题
由于绑定操作是由宏实现的,ADO EXTENTSION 绑定 recordset时需要注意冗余变量问题 ,不慎将导致记录无法出来。class CHasPrpRs : public CADORecordBinding...{ BEGIN_ADO_BINDING(CHasPrpRs) ADO_VARIABLE_LENGTH_ENTRY2(1, adVarChar, m_ch原创 2008-04-17 23:17:00 · 792 阅读 · 0 评论 -
使用ADO EXTENSION榜定数据表之后,在读数据时出现类似"屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯"的情况
所有字段几乎都是文本,那么在凡是为空的字段都显示为"屯屯屯屯屯屯屯屯屯屯屯屯屯屯"有一个字段出现了"屯屯屯屯china",而这里的china应该是下一个字段的值在CADORecordBinding的子类构造函数中初始化诸字符变量,如:class CHasPrpaRs : public CADORecordBinding ...{ BEGIN_ADO_BINDING(CHasPrpa原创 2008-04-15 21:49:00 · 1306 阅读 · 0 评论 -
error C1075: end of file found before the left brace '{'的错误
在使用ADO Extention做数据库应用程序(用了CADORecordBinding的派生类后) 出现如下错误:error C1075: end of file found before the left brace {究其原因发现是class CRsRGrid : public CADORecordBinding {//BEGIN_ADO_BIN原创 2008-04-04 11:28:00 · 4882 阅读 · 2 评论 -
CProtertySheet=CPropertyPage+CTabCtrl
如果需要定制随对话框或者FormView而改变大小的PropertySheet,则可重载CPropertySheet,并在其OnSize函数中遍历所有CPropertyPage并设置其大小,也要GetTabCtrl,并设置其大小。原创 2008-03-28 00:06:00 · 1015 阅读 · 0 评论 -
CodeProject上的几种Layout
一、ResizableLibhttp://www.codeproject.com/KB/dialog/resizablelib.aspx AddAnchor(IDC_STATIC2, TOP_LEFT); AddAnchor(IDC_EDIT1, TOP_LEFT, ANCHOR(40,100)); AddAnchor(IDC_BUTTON1, BOTTOM_LEFT, ANCH原创 2008-03-12 15:58:00 · 1799 阅读 · 0 评论 -
原来添加控件不需要Create
原来添加控件不需要Create,仅需要定义成员变量,进而在DoDataExchange里面加:DDX_Control(pDX, IDC_EDIT1 ,mEdit); DDX_Text(pDX, IDC_EDIT1, m_Str);而不再需要显式地mEdit.Create(...)原创 2008-03-09 21:49:00 · 725 阅读 · 0 评论 -
断言docmgr.cpp,852行的问题
Programming VC++,中文书名《VC++ 技术内幕》的示例ex20d演示了MDI程序中多doc/view的使用,加了一个HexView其中的CEx20dApp::InitInstance()函数中: CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_EX20D原创 2008-02-22 14:57:00 · 1126 阅读 · 0 评论 -
调用文件“属性”对话框
#include "shellapi.h"////////////////////////////////////////////////////////appended by zyySHELLEXECUTEINFO se;//////////////////////////////////////////////////////se.hwnd=hWnd;se.lpVerb="properties原创 2007-05-28 11:49:00 · 1328 阅读 · 0 评论 -
模拟CTabCtrl控件的单击事件
1、必须在CTabCtrl所在父窗体处理WM_NOTIFY消息2、用一下代码段模拟单击事件 m_wndView.m_Tab.SetCurSel(m_wndView.m_Tab.GetItemCount()-1); NMHDR nh; nh.hwndFrom=m_wndView.m_Tab.m_hWnd; nh.idFrom=IDC_TABCTRL; nh.code=原创 2007-04-06 10:54:00 · 2397 阅读 · 1 评论 -
使用CHtmlView需要注意的问题之一
除了需要重载CHtmlView的几个函数之外,还需要在Allication的InitInstance中加入:// Call if using OLE Controls AfxEnableControlContainer(); //AfxOleInit(); ::CoInitialize(NULL);相当于在Wizard创建工程时选择允许OLE控件原创 2007-04-05 14:37:00 · 1264 阅读 · 0 评论 -
去掉窗体的边框,并且禁止拖动改变窗体大小
在Win32 SDK程序中,Create时创建一个一个窗体。欲去除其边框标题栏等属性,宜在WM_CREATE消息中写,或者在子窗体(例如按钮)的单击消息中以SetWindowLong(hwnd, GWL_STYLE,GetWindowLong(hwnd, GWL_STYLE) & (~(WS_CAPTION | WS_BORDER|WS_SYSMENU|WS_T原创 2007-04-03 14:24:00 · 4096 阅读 · 0 评论 -
愚蠢的问题
CRect rt; this->GetWindowRect (&rt); ScreenToClient(&rt); this->m_Btn7.MoveWindow (rt.left ,rt.top ,(4/7)*rt.Width (),(6/10)*rt.Height (),TRUE);这段代码运行之后m_Btn7消失,竟是由于(4/7)*rt.Width ()计算下来为零,因为rt.Wid原创 2006-12-14 20:51:00 · 945 阅读 · 0 评论 -
VC编译多个相关Project方法点滴(续)
倘若exeProject 使用了DllProject1所生成的Dll,可设置ExeProject的Dependencies为DllProject1,也就无需再另行添加DllProject1所生成的LIB文件。原创 2006-12-07 19:40:00 · 1052 阅读 · 0 评论 -
VC编译多个相关Project方法点滴
在多工程相关情况下,尤其包含多个DLL服务于一个Exe时,对于代码文件和输出文件的组织安排:通常如此Project Directory Folder/WorkSpace Folder /output /DllProject1原创 2006-12-07 00:12:00 · 1635 阅读 · 1 评论 -
VC6中设定命令行参数
经常需要调试命令行程序,并且跟上固定的参数,此时就需要设定参数。Project Settings->Debug-〉Programme arguments比如填上:“d:/somedir/somefile”原创 2006-05-28 11:39:00 · 2563 阅读 · 0 评论 -
VC6中设定工作目录
很多大的workspace通常包含好几个project,这几个project互相之间又存在调用依赖关系,故而它们通常会被放到同一个目录下,假设为debug。在debug目录下直接运行生成的exe与按ctrl+f5(or press f5)经常会有点区别,后者不能正确运行,显示未能加载某个模块。这是因为直接运行exe会自动搜寻当前目录下的可加载模块,而ctrl+f5不一定。故而此处宜设定工作目录,原创 2006-05-28 11:36:00 · 3482 阅读 · 1 评论 -
扑克游戏架构及其实现(三)
扑克游戏架构及其实现(三)技术要点罗列及解析扑克绘制定义名词如下:l 花色suit扑克的属性之一,所取值为方块、草花、红桃、黑桃之一l 面值face扑克的属性之一,所取值为A、2、3等等直到Kl 普通牌Ace至K的牌,称为普通牌l Joker(大小鬼、大小疯)除了Ace至K的牌,即Joker(大小鬼、大小疯)此处笔者参考了http:/原创 2005-04-11 11:48:00 · 2126 阅读 · 1 评论 -
扑克游戏架构及其实现(一)
前言去年下半年做了一个项目,是扑克类的网络游戏。原计划包括:拱猪、斗地主、梭哈、红五三打一等。但是最重项目流产,只完成了拱猪和红五三打一。去年在动工的时候,网上的相关资料很少(一般都是很简单的比较大小游戏),尤其是win32下以MFC实现更加是凤毛麟角。我主要参考了一篇老外的文章,此文主要阐述了如何利用windows自带的cards.dll绘制各色扑克牌,以及示范程序,我会在收藏中贴出来。想找到联原创 2005-03-29 11:40:00 · 3180 阅读 · 1 评论 -
扑克游戏架构及其实现(二)
定义系统对象l 游戏(Game)该对象负责与其他端进程的通信,打包和解析命令消息,组成流水线,发至通讯平台。控制洗牌、发牌操作,主持回收牌销毁牌的动作。判定可以出牌的玩家,并予以令牌。记录牌局中的某轮的赢家等等牌局中的公共信息。l 游戏视图(GameView)展现自使用者面前的界面,自MFC类CView的派生类对象。l 扑克牌(PokerWnd)该对原创 2005-03-30 21:22:00 · 1813 阅读 · 0 评论 -
(示例)使用快速排序函数qsort的例程
函数名: qsort 功 能: 使用快速排序例程进行排序 用 法: void qsort(void *base, int nelem, int width, int (*fcmp)()); 程序例: #include #include #include int sort_function( const void *a, const void *b); char list[5]原创 2004-12-09 06:34:00 · 1532 阅读 · 0 评论 -
[MSDN]如何利用qsort对CArray的继承类进行排序
HOWTO: Quick Sorting Using MFC CArray-Derived ClassesID: Q216858 The information in this article applies to:Microsoft Visual C++, 32-bit Editions, versions 5.0, 6.0SUMMARY原创 2004-12-09 06:03:00 · 2047 阅读 · 0 评论 -
Miranda IM v0.6源代码编译
<v:shapetype id="_x0000_t75" coordsize="21600,21600"o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"stroked="f"><v:shape id="_x0000_i102原创 2007-02-10 10:50:00 · 1988 阅读 · 1 评论 -
MFC程序中父窗体捕捉子窗体被点击的消息
只需要重载父窗体的OnCommand(WPARAM wParam, LPARAM lParam) 函数,而不需要重载子窗体的OnLButtonUp(UINT nFlags, CPoint point) 函数 典型地如下操作即可BOOL CDiaBoxDlg::OnCommand(WPARAM wParam, LPARAM lParam) { // TODO: Add your special原创 2007-02-28 16:29:00 · 3006 阅读 · 0 评论 -
Win32 SDK中Context Menu使用大致流程
1、CreatePopupMenu创建菜单 2、TrackPopupMenu显示菜单,系统会自动发个WM_CONTEXTMENU消息。3、消息循环中使用WM_CONTEXTMENU处理,其他消息。Context Menu的应用(if in MFC)直至探出菜单Abstract: Windows不认为顶级菜单是Popup Menu!!!!!Method ONE/////////////////原创 2007-03-05 11:09:00 · 2392 阅读 · 1 评论