天狼鼠

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

2011年3月20日

摘要: 两个验证方式是有明显不同的。主要集中在信任连接和非信任连接。windows 身份验证相对于混合模式更加安全,使用本连接模式时候,sql不判断sa密码,而仅根据用户的windows权限来进行身份验证,我们称为“信任连接”,但是在远程连接的时候会因NTML验证的缘故,无法登陆。混合模式验证就比较既当本地用户访问sql时候采用windows身份验证建立信任连接,当远程用户访问时由于未通过windows认证,而进行sql server认证(使用sa的用户也可以登录sql),建立“非信任连接”,从而使得远程用户也可以登录。更加直接一些就是windows身份验证,不验证sa密码,如果windows登录密码 阅读全文
posted @ 2011-03-20 17:38 情有独钟 阅读(520) 评论(0) 推荐(0)

摘要: 参考地址:http://technet.microsoft.com/zh-cn/library/ms187087.aspx 阅读全文
posted @ 2011-03-20 17:37 情有独钟 阅读(264) 评论(0) 推荐(0)

摘要: 1.N'money'表示Unicode常量分隔标识符“[ ]”对于所有不符合标识规则的标识符必须进行分隔如My Table ====[My Table]2.局部变量--变量名以“@”开头,定义语法如下:DECLAER {@局部变量名 数据类型}赋值为:Set {@局部变量=表达式} //一次只能给一个变量赋值使用select可以一次给一个或多个变量赋值,SELECT@ARY=2,@SUM=3 全局变量一“@@”开头3.运算符比较运算符 "<>"不等于字符串运算符:+BEGIN·····END语句块 阅读全文
posted @ 2011-03-20 17:37 情有独钟 阅读(146) 评论(0) 推荐(0)

摘要: <%set conn=server.createobject("adodb.connection")conn.connectionstring="PROVIDER=MSDASQL;DRIVER={SQL Server};SERVER=210.76.209.130;DATABASE=databasename;UID=sa;PWD=password;"conn.open %>其中 210.76.209.130 就是远程服务器的IP 阅读全文
posted @ 2011-03-20 17:36 情有独钟 阅读(345) 评论(0) 推荐(0)

摘要: 刚刚装了SQL2008,配置了一下,在网上找到这个教程,觉得不错,转载学习1、 更改TCP/IP连接为启用2、 登录 , 修改2个地方 a) 身份验证方式(混合模式) 图一:首先使用windows身份登录(注意, 服务器名称必须填写正确) 图二:打开SQL 实例的属性 图三:选择左边的“安全性”, 注意做如下选择 b) 启用sa, 若将sa的密码设置为空密码, 跳过第一步; 若密码不为空, 两步同时设置, 即:2个都设置完成后点击确定即可。 i. 第一步, 启用Sa 更改完成后,单击确定保存 ii. 第二步,设置密码更改完成后,单击确定保存当然整个设置完成之后, 还需要重启sql服务 阅读全文
posted @ 2011-03-20 17:36 情有独钟 阅读(709) 评论(0) 推荐(0)

摘要: 版本:sql server 2005 exepress editionSQLEXPR_CHS.EXE 57.4MB下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=220549b5-0b07-4448-8848-dcc397514b41&displaylang=zh-cn安装完客户端软件后,就可以驱动程序中的ADODB程序。连接数据库字符串有两个方式:一种sql服务器端默认端口,二是sql服务器端更改了端口如4000.1、默认端口SQL Server的默认TCP端口是1433,UDP端口是1434。2005连接字 阅读全文
posted @ 2011-03-20 17:05 情有独钟 阅读(1048) 评论(0) 推荐(0)

摘要: SQL Server连接中的四个最常见错误: 一. "SQL Server 不存在或访问被拒绝 " 这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多. 一般说来,有以下几种可能性: 1,SQL Server名称或IP地址拼写有误 2,服务器端网络配置有误 3,客户端网络配置有误 要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因. ============= 首先,检查网络物理连接 ============= ping <服务器IP地址/服务器名称> 如果 ping <服务器IP地址> 不成功,说明物理连接有问题,这时候要 阅读全文
posted @ 2011-03-20 17:02 情有独钟 阅读(2901) 评论(0) 推荐(0)

摘要: TCP/IP是一个广泛使用的广域网协议,在NT和2000系统中,它的一些参数会由控制面板中的网络或DHCP服务器提供。下面我们从注册表的角度看看TCP/IP的设置问题。注册表中的大部分设置是最优设置,但是在某些情况下,这些设置可能不能满足某些用户的特殊需要,因此才有必要修改注册表。但是,对注册表的修改是比较危险的,通常情况下,不要对它进行任意的修改。所有的TCP/IP设置均在两个注册表表项下:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\ParametersHKEY_LOCAL_MACHINE\SYSTEM\Current 阅读全文
posted @ 2011-03-20 17:01 情有独钟 阅读(757) 评论(0) 推荐(0)

摘要: 一、字节序定义字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian。引用标准的Big-Endian和Little-Endian的定义如下:a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高 阅读全文
posted @ 2011-03-20 17:01 情有独钟 阅读(477) 评论(0) 推荐(0)

摘要: HANDLE threadhandle = CreateThread(NULL, 0, RecvThreadProc, NULL, NULL, NULL); CloseHandle(threadhandle);不明白为什么创建线程后,要马上把线程的句柄关闭,这样做的目的是什么? 这样做会杀掉线程吗?解答: 创建线程后返回了线程句柄,新创建的线程内核对象的使用计数是2,一个是线程本身,一个是创建线程的线程,创建线程的线程closehandle后,新的线程的内核对象使用计数为1,当这个新线程结束运行后内核对象的使用计数还要减1,这时内核对象的使用计数是0,则系统会自动删除新线程的内核对象,这是正常 阅读全文
posted @ 2011-03-20 17:00 情有独钟 阅读(334) 评论(0) 推荐(0)

摘要: 阻塞1.面向连接的同步套接字(TCP)2.无连接的同步套接字(UDP)一般要使用多线程的形式非阻塞3.面向连接的异步套接字(基于事件)4.无连接的异步套接字(基于事件)使用CAsyncSocket或CSocket的派生类 阅读全文
posted @ 2011-03-20 17:00 情有独钟 阅读(195) 评论(0) 推荐(0)

摘要: 1.SOCKET_STREAM_FILE_INFO格式:typedef struct _SOCKET_STREAM_FILE_INFO {TCHAR szFileTitle[128]; //文件的标题名DWORD dwFileAttributes; //文件的属性FILETIME ftCreationTime; //文件的创建时间FILETIME ftLastAccessTime; //文件的最后访问时间FILETIME ftLastWriteTime; //文件的最后修改时间DWORD nFileSizeHigh; //文件大小的高位双字DWORD nFileSizeLow; //文件大小的 阅读全文
posted @ 2011-03-20 16:59 情有独钟 阅读(810) 评论(0) 推荐(0)

摘要: 实话,编写MFC规则库和扩展库和编写其他库没有什么区别.其实都一样.只不过, MFC规则库和扩展库对支持MFC的特性更好,你在写MFC规则库和扩展库的时候基本上可以和你写MFC应用程序一样.那我们就随便写写吧.首先建立一个MFC扩展的库吧.在这里我们导出一个函数调用前面的MFC静态苦的导出函数:extern "C" __declspec(dllexport) void ShowDialog(){typedef void ( *lpShowDialog)( ); //DLL里的函数原型HINSTANCE hInst = NULL; //DLL的实例句柄,在WIN32中HINS 阅读全文
posted @ 2011-03-20 16:55 情有独钟 阅读(342) 评论(0) 推荐(0)

摘要: 静态链接到 MFC 的规则 DLL 是在内部使用 MFC 的 DLL,这类 DLL 中的导出函数可由 MFC 或非 MFC 可执行文件调用。正如名称所描述的,这类 DLL 是使用 MFC 静态链接库版本生成的。函数通常是通过标准 C 接口从规则 DLL 导出的。有关如何编写、生成和使用规则 DLL 的示例,请参见示例 DLLScreenCap。请注意,Visual C++ 文档中不再使用 USRDLL 一词。静态链接到 MFC 的规则 DLL 具有与原来的 USRDLL 相同的特性。静态链接到 MFC 的规则 DLL 具有下列功能:客户端可执行文件可以用任何支持使用 DLL 的语言(C、C++ 阅读全文
posted @ 2011-03-20 16:55 情有独钟 阅读(453) 评论(0) 推荐(0)

摘要: Regular DLL分为两类: (1)静态链接到MFC 的规则DLL 静态链接到MFC的规则DLL与MFC库(包括MFC扩展 DLL)静态链接,将MFC库的代码直接生成在.dll文件中。在调用这种DLL的接口时,MFC使用DLL的资源。因此,在静态链接到MFC 的规则DLL中不需要进行模块状态的切换。 使用这种方法生成的规则DLL其程序较大,也可能包含重复的代码。 (2)动态链接到MFC 的规则DLL 动态链接到MFC 的规则DLL 可以和使用它的可执行文件同时动态链接到 MFC DLL 和任何MFC扩展 DLL。在使用了MFC共享库的时候,默认情况下,MFC使用主应用程序的资源句柄来加载资 阅读全文
posted @ 2011-03-20 16:54 情有独钟 阅读(358) 评论(0) 推荐(0)

摘要: http://blog.csdn.net/BEYOND_Q/default.aspx?PageNumber=9 阅读全文
posted @ 2011-03-20 16:54 情有独钟 阅读(192) 评论(0) 推荐(0)

摘要: #include "afxmt.h" //使用同步类的头文件CCriticalSection g_CriticalSection; //临界区对象,不可以用于进程间CEvent g_Event1; //自动重置事件,初始无信号状态 CEvent g_Event2(TRUE); //自动重置事件,初始有信号状态CEvent g_Event3(FALSE,TRUE); //人工重置事件,初始无信号状态CEvent g_Event4(TRUE,TRUE); //人工重置事件,初始有信号状态//事件也可以用用于进程间CMutex g_Mutex; //互斥对象,可以用于进程间CSe 阅读全文
posted @ 2011-03-20 16:53 情有独钟 阅读(250) 评论(0) 推荐(0)

摘要: *---------------------------------------------------------*\另一种同步实现\*---------------------------------------------------------*///CRITICAL_SECTION g_cs;HANDLE g_hEvent = NULL;HANDLE g_hMutex = NULL;HANDLE g_hSemaphore = NULL; static DWORD SynThreadProc1( LPVOID lpParameter ){/* EnterCriticalSection( 阅读全文
posted @ 2011-03-20 16:53 情有独钟 阅读(234) 评论(0) 推荐(0)

摘要: 现在,我们再写一下带有消息循环的线程1 从CWinThread派生自己的类(CAfxThread) :class CAfxThread : public CWinThread{DECLARE_DYNCREATE(CAfxThread)protected:CAfxThread(); // protected constructor used by dynamic creation// Attributespublic:// Operationspublic:// Overrides// ClassWizard generated virtual function overrides//{{AFX 阅读全文
posted @ 2011-03-20 16:52 情有独钟 阅读(380) 评论(0) 推荐(0)

摘要: 接上一回 - 多线程专题之MFC线程(2),我们来聊聊线程间的通信:/*------------------------------------------------------------*\ 多线程间的通信应用程序中多线程的使用通常都是用于主线程执行与用户交互,次要线程执行后台任务。当用户触发了某个事件,可能需要让次要线程知道,然后处理该事件。这就涉及了如何在多个线程间的通信问题。通常有三种方式:1、全局变量:同一个进程中的所有线程共享操作系统分配所有资源,这就意味着我们可以用全局变量解决通信问题。当然了,建议使用volatile 修饰符表示全局变量,作用上次不说了嘛,好,在说一次啊。v 阅读全文
posted @ 2011-03-20 16:52 情有独钟 阅读(259) 评论(0) 推荐(0)

摘要: 现在,我们来谈谈用MFC如何创建多线程了吧!MFC中有两类线程 :工作者线程 和 用户界面线程他们主要的区别是: 工作者线程没有消息循环,通常用来执行后台计算和维护任务 户界面线程有自己的消息队列 和 消息循环,是用于响应用户及系统所产生的事件和消息,即有交互功能当然了,对于Win32的API编程而言,他们是没有区别的。 今天,我们就创建一个简单的MFC式工作者线程:void CMultiThreadDlg::OnBtnUsageThree() {// TODO: Add your control notification handler code here//简单的工作者线程CWinThre 阅读全文
posted @ 2011-03-20 16:51 情有独钟 阅读(803) 评论(0) 推荐(0)

摘要: vckbase站点上,由一个多线程的demo,讲得是UI线程,如何开启一个UI界面线程.但是里面没有涉及到主线程如何和UI线程间通信.这个问题,我搞了好久.其实很简单,给一个线程发消息 PostThreadMessage(). BOOL PostThreadMessage( DWORD idThread, // thread identifier {这个参数为线程ID,不是线程句柄} UINT Msg, // message to post WPARAM wParam, // first message parameter LPARAM lParam // second message par 阅读全文
posted @ 2011-03-20 16:51 情有独钟 阅读(756) 评论(0) 推荐(1)

摘要: 天狼鼠 加博友 关注他 最新日志在VC中如何隐藏一个主程序主窗口向子控件发送消息菜单项SetClassLong,GetClassLong按钮和输入焦点子窗口向父窗口发送消息该作者的其他文章博主推荐相关日志随机阅读首页推荐日本媒体怎样报道大地震大麻在手我不敢吸“中医治癌”是骗局抢盐根本原因是民众科学素养低日本超市的盐在打折卖后院来了一只受伤的小狐狸更多>>对“推广广告”提建议 多线程专题之MFC创建线程(1)DLL专题之MFC规则库和扩展库多线程专题之线程参数多线程应用 2010-11-28 22:12:45 阅读84 评论0 字号:大中小订阅 .传递一般参数: 线程函数:stati 阅读全文
posted @ 2011-03-20 16:50 情有独钟 阅读(436) 评论(0) 推荐(0)

摘要: volatile修饰的变量防止被优化,主要用在多线程程序中。避免编译器优化。编译器进行优化时,它有时会取一些值的时候,直接从寄存器里进行存取,而不是从内存中获取,这种优化在单线程的程序中没有问题,但到了多线程程序中,由于多个线程是并发运行的,就有可能一个线程把某个公共的变量已经改变了,这时其余线程中寄存器的值已经过时,但这个线程本身还不知道,以为没有改变,仍从寄存器里获取,就导致程序运行会出现未定义的行为 阅读全文
posted @ 2011-03-20 16:50 情有独钟 阅读(176) 评论(0) 推荐(0)

摘要: http://www.vckbase.com/document/viewdoc/?id=1708 阅读全文
posted @ 2011-03-20 16:49 情有独钟 阅读(223) 评论(0) 推荐(0)

摘要: 在图形系统中,有这么一个「永远」有人执行的有趣程序,它简单地使用随机的大小和色彩绘制一系列矩形。您可以在Windows中建立一个这样的程序,但是它并不像乍看起来那样容易编写。我希望您能认识到,您不能简单地在WM_PAINT消息中使用一个while(TRUE)循环。当然,它能够执行,但是程序将停止对其他消息的处理,同时,这个程序不能中止或者最小化。一种可以接受的方法是设定一个Windows定时器,给窗口程序发送WM_TIMER消息(我将在 第八章中讨论定时器)。对于每条WM_TIMER消息,您使用GetDC取得一个设备内容,画一个随机的矩形,然后用ReleaseDC释放设备内容。但是这样又降低了 阅读全文
posted @ 2011-03-20 16:48 情有独钟 阅读(528) 评论(0) 推荐(0)

摘要: BeginPaint、GetDC和GetWindowDC获得的设备内容都与视讯显示器上的某个特定窗口相关。取得设备内容句柄的另一个更通用的函数是CreateDC:hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ; 其它行程序 DeleteDC (hdc) ; 例如,您可以通过下面的呼叫来取得整个屏幕的设备内容句柄:hdc = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) ; 在窗口之外写入画面一般是不恰当的,但对于一些不同寻常的应用程序来说,这样做很方便(您还可通过 阅读全文
posted @ 2011-03-20 16:48 情有独钟 阅读(262) 评论(0) 推荐(0)

摘要: 我在本章前面已经提到过,当用鼠标单击按钮、复选框、单选框和拥有者绘制按钮时,它们接收到输入焦点。这些控件使用文字周围的虚线来表示它拥有了输入焦点。当子窗口控件得到输入焦点时,其父窗口就失去了输入焦点;所有的键盘输入都进入子窗口控件,而不会进入父窗口中。但是,子窗口控件只对Spacebar键作出回应,此时Spacebar键的作用就如同鼠标按键一样。这种情形导致了一个明显的问题:您的程序失去了对键盘处理的控件。让我们看看我们对此能做一些什么。我在第六章中已经提到过,当Windows将输入焦点从一个窗口(例如一个父窗口)转换到另一个窗口(例如一个子窗口控件)时,它首先给正在失去输入焦点的窗口发送一个 阅读全文
posted @ 2011-03-20 16:47 情有独钟 阅读(350) 评论(0) 推荐(0)

摘要: CWnd*SetCapture();在指定窗口捕获鼠标所产生的动作CWnd*ReleaseCapture()释放指定窗口的捕获 阅读全文
posted @ 2011-03-20 16:47 情有独钟 阅读(192) 评论(0) 推荐(0)

摘要: 选中和不选中按钮均需要向子窗口控件发送BM_CHECK消息。要设定一个按钮选中标记,您可以使用: SendMessage (hwndCtrl, BM_SETCHECK, 1, 0) ;要消除选中标记,您可以使用:SendMessage (hwndCtrl, BM_SETCHECK, 0, 0) ;其中hwndCtrl参数是子窗口按钮控件的窗口句柄。第一种简化的方法是使用专门的对话框程序SendDlgItemMessage:SendDlgItemMessage (hDlg, id, iMsg, wParam, lParam) ;它相同于:SendMessage (GetDlgItem (hDlg 阅读全文
posted @ 2011-03-20 16:46 情有独钟 阅读(565) 评论(0) 推荐(0)

摘要: ShowWindow(SW_HIDE); NOTIFYICONDATA nid;nid.cbSize = sizeof(NOTIFYICONDATA);nid.hWnd= GetSafeHwnd();nid.uID = ID_SYSTEMTRAY;nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;nid.uCallbackMessage = WM_SYSTEMTRAY;nid.hIcon = AfxGetApp()->LoadIcon(IDI_SYSTEMTRAY_ICON );strcpy( nid.szTip, "System Tray T 阅读全文
posted @ 2011-03-20 16:44 情有独钟 阅读(465) 评论(0) 推荐(0)

摘要: void CTestCursorDlg::OnLButtonUp(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultSetClassLong(m_hWnd,GCL_HCURSOR,(long)m_hCursor);CDialog::OnLButtonUp(nFlags, point);}void CTestCursorDlg::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message h 阅读全文
posted @ 2011-03-20 16:43 情有独钟 阅读(360) 评论(0) 推荐(0)

摘要: 菜单中的每一项都有三个特性。第一个特性是菜单中显示什么,它可以是字符串或位图。第二个特性是WM_COMMAND消息中Windows发送给程序的菜单ID,或者是在使用者选择菜单项时Windows显示的弹出式菜单的句柄。第三个特性是菜单项的属性,包括是否被禁用、无效化或被选中虽然存取菜单资源的最常用方法是在窗口类别中指定菜单,您也可以使用其它方法。Windows应用程序可以使用LoadMenu函数将菜单资源加载内存中,如同LoadIcon和LoadCursor函数一样。LoadMenu传回一个菜单句柄。如果您在资源描述档中为菜单使用了名称,叙述如下:hMenu = LoadMenu (hInsta 阅读全文
posted @ 2011-03-20 16:43 情有独钟 阅读(627) 评论(0) 推荐(0)

摘要: 在处理WM_PAINT消息时,使用这种方法。它涉及BeginPaint和EndPaint两个函数,这两个函数需要窗口句柄(作为参数传给窗口消息处理程序)和PAINTSTRUCT结构的变量(在WINUSER.H表头文件中定义)的地址为参数。Windows程序写作者通常把这一结构变量命名为ps并且在窗口消息处理程序中定义它:PAINTSTRUCT ps ; 在处理WM_PAINT消息时,窗口消息处理程序首先呼叫BeginPaint。BeginPaint函数一般在准备绘制时导致无效区域的背景被擦除。该函数也填入ps结构的字段。BeginPaint传回的值是设备内容句柄,这一传回值通常被保存在叫做hd 阅读全文
posted @ 2011-03-20 16:42 情有独钟 阅读(420) 评论(0) 推荐(0)

摘要: 如果有必要,无论矩形是否被选中,都可以给ChildProc增加一种向其父窗口消息处理程序(WndProc)发送消息的手段。通过呼叫GetParent,子窗口消息处理程序能确定其父窗口的窗口句柄:hwndParent = GetParent (hwnd) ; 其中,hwnd是子窗口的窗口句柄。它可以向其父窗口消息处理程序发送消息:SendMessage (hwndParent, message, wParam, lParam) ; 那么message应该设定为什么呢?您可以随意地设定,数值大小可以与WM_USER相同或更大,这些数字代表和预先定义的WM_ 消息不冲突的消息。也许对这个消息,子窗口 阅读全文
posted @ 2011-03-20 16:42 情有独钟 阅读(879) 评论(0) 推荐(0)

摘要: 数组的sizeof值等于数组所占用的内存字节数,如: char a1[] = "abc"; int a2[3]; sizeof( a1 ); // 结果为4,字符 末尾还存在一个NULL终止符 sizeof( a2 ); // 结果为3*4=12(依赖于int) 一些朋友刚开始时把sizeof当作了求数组元素的个数,现在,你应该知道这是不对的,那么应该怎么求数组元素的个数呢Easy,通常有下面两种写法: int c1 = sizeof( a1 ) / sizeof( int ); // 总长度/单个元素的长度 int c2 = sizeof( a1 ) / sizeof( 阅读全文
posted @ 2011-03-20 16:41 情有独钟 阅读(2199) 评论(0) 推荐(0)

摘要: VC学习笔记:图像显示SkySeraph OCT.30th 2010 HQUEmail-zgzhaobo@gmail.com QQ-452728574Latest Modified Date:OCT.30th 2010HQU原理方法显示资源中的图片 (1)从资源中装入位图 ● 定义位图对象数据成员CBitmap m_Bitmap; ● 调用CBitmap成员函数LoadBitmap(),如m_Bitmap.LoadBitmap(IDB_BITMAP1); ● 传入LoadBitmap的参数是位图在图形编辑器中生成或从位图文件中引入时赋予的识别符。(2)生成与位图相联系的内存设备情境对象 CDC 阅读全文
posted @ 2011-03-20 16:41 情有独钟 阅读(449) 评论(0) 推荐(0)

摘要: 12.1.3 利用IPicture接口实现显示BMP/JPG/GIF图像1.问题阐述在VB 中显示一个图像非常简单,只要将图像控件拖入到面板中,设置相应的属性即可。其实它的显示原理只是调用Windows的Ipicture接口,本节重点介绍了这一接口。2.实现技巧如何利用IPicture显示图像呢?首先了解一下这个接口的内容和作用、IPicture接口是一个COM类,操纵着图像对象及其属性。图像对象提供对位图的抽象,而Windows负责BMP、JPG和GIF位图的标准实现。IPictrue接口支持BMP、DIB、EMF、GIF、ICO、JPG、WMF格式图片的显示,但只能保存BMP和ICO格式的 阅读全文
posted @ 2011-03-20 16:40 情有独钟 阅读(733) 评论(0) 推荐(0)

摘要: void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){CDC dc;dc.Attach(lpDrawItemStruct->hDC);VERIFY(lpDrawItemStruct->CtlType==ODT_BUTTON);CBrush brush;brush.CreateSolidBrush(RGB(0,0,120));CRect rect;rect=lpDrawItemStruct->rcItem;dc.FillRect(rect,&brush);/*UINT uStyle = DFCS_BUTT 阅读全文
posted @ 2011-03-20 16:39 情有独钟 阅读(986) 评论(0) 推荐(0)

摘要: CWinThread::m_pMainWnd 该成员变量去存储你的线程主窗口对象。当和m_pMainWnd 相关的窗口被关闭后,MFC会自动终止你的线程。如果该线程是应用程序主线程,程序也将会被终止。如果该数据成员为NULL,应用程序CWinApp对象的主窗口将用来决定什么时候去终止线程。m_pMainWnd是一个CWnd*类型的public变量。 很明显,你需要在重载InitInstance时为m_pMainWnd赋值。在工作线程中,m_pMainWnd自动继承其父线程的值。补充:只有CWinThread对象才有m_pMainWndclass CWinThread : public CCmd 阅读全文
posted @ 2011-03-20 16:38 情有独钟 阅读(534) 评论(0) 推荐(0)

摘要: OleLoadPicture 函数实际上创建了一个IPicture类型的COM接口对象,然后我们可以通过这个COM接口来操作图片(实际上你也可以用API OleCreatePictureIndirect来加载图片,不过相比而言OleLoadPicture函数简化了基于流的IPicture对象的创建),下面是示例代码:(注:由于只是用来示例,代码中省去了出错情况的处理)void DisplayImage(HDC hDC, LPCTSTR szImagePath) { HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_REA 阅读全文
posted @ 2011-03-20 16:38 情有独钟 阅读(324) 评论(0) 推荐(0)

摘要: CWnd,CDC, Cxxx等都是MFC的类,这些类提供了很多成员函数来执行系统调用等操作,但是核心的类成员数据都是 句柄,(包括窗口句柄,DC句柄,线程句柄等)。 m_hWnd m_hDC m_hThread 如果这些类对象的这些句柄为空,就表示无效对象。比如你 CWnd * pWnd = new CWnd,执行是合法的,但是没有Create就没有窗口句柄,基本上就是一个无效对象,只是系统内存申请了内存分配空间而已,很多操作都无法执行(debug模式下会出现断言错误窗口)。 但是,假如你申请了一个CWnd,CDC的对象实体,可以使用Attach来指定一个有效的句柄付给这个对象。那么此对象就是 阅读全文
posted @ 2011-03-20 16:37 情有独钟 阅读(472) 评论(0) 推荐(0)

摘要: CWnd::OnNcHitTest afx_msg UINT OnNcHitTest( CPoint point ); 返回值:下面列出的鼠标击中测试枚举值之一。 · HTBORDER 在不具有可变大小边框的窗口的边框上。 · HTBOTTOM 在窗口的水平边框的底部。 · HTBOTTOMLEFT 在窗口边框的左下角。 · HTBOTTOMRIGHT 在窗口边框的右下角。 · HTCAPTION 在标题条中。 · HTCLIENT 在客户区中。 · HTERROR 在屏幕背景或窗口之间的分隔线上(与HTNOWHERE相同, 阅读全文
posted @ 2011-03-20 16:36 情有独钟 阅读(625) 评论(0) 推荐(0)

摘要: 在windows系列上做编程,gdi是一个很重要的技术点,有很多程序在运行多次后出现异常,除了众所周知的内存泄露以外,gdi资源泄露也是一个很直接的原因.今天就把我自己在编程中总结的一些经验给大家分享,欢迎高手补充.1.Create出来的gdi对象,一定要用DeleteObject来释放,释放顺序是先Create的后释放,后Create的先释放.这里的Create指的是以它为开头的gdi函数,比如,CreateDIBitmap,CreateFont等等,最后都要调用DeleteObject来释放.2.Create出来的dc要用DeleteDC来释放,Get到的要用ReleaseDC释放.3.确 阅读全文
posted @ 2011-03-20 16:35 情有独钟 阅读(509) 评论(0) 推荐(0)

摘要: 如果你希望能够在自己的程序中表现出新意,那么你一定不会仅仅满足于MFC提供那些标准控件。这时,我们就必须自己另外多做些工作了。就改变控件外观这一点来说,主要是利用控件的自绘功能(Owner Draw)实现的。本篇将和各位一起定义一个XP风格的CXPButton按钮类,目的不在于介绍CXPButton类的使用技巧,而在于向各位阐述实现自绘按钮的方法。当然如果你觉得CXPButton有用的话,也可以把它的源文件保存下来,直接加入到自己的项目中。本篇要点:一、准备工作二、实现原理及难点三、按钮类的使用四、小结与提示五、附录 一、准备工作在开始编码之前,首先应该确定好,更准确的说应该是设计好按钮在各种 阅读全文
posted @ 2011-03-20 16:35 情有独钟 阅读(6507) 评论(0) 推荐(0)

摘要: Windows显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要设置它们到当前设备里,就需要使用SelectObject函数,比如上面介绍的字体设置,就会用到这个函数。当你创建一个位图时,这时Windows就会在内存里分配一块内存空间,用来保存位图的数据。当你创建字体时,也会分配一块内存空间保存字体。如果程序只是分配,而不去删除,就会造成内存使用越来越多,最后导到Windows这幢大楼倒下来。如果你忘记删除它,就造成了内存泄漏。因此,当你创建显示设备资源时,一定要记得删除它们啊,否则运行你的程序越长,就导致系统不稳定。记得使用DeleteObject函数去删除它们,把占用的内存 阅读全文
posted @ 2011-03-20 16:34 情有独钟 阅读(567) 评论(0) 推荐(0)

摘要: 一.什么是勾子:在Windows系统中,勾子(hook)是一种特殊的消息处理机制。勾子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的勾子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。可见,利用勾子可以实现许多特殊而有用的功能。因此,对于高级编程人员来说,掌握勾子的编程方法是很有必要的。二.勾子的类型 1.按事件分类,有如下的几种常用类型 (1) 键盘勾子和低级键盘勾子可以监视各种键盘消息。 (2) 鼠标勾子和低级鼠标勾子可以监视各种鼠标消息。 (3) 外壳勾子可以监视各种Shell事件消 阅读全文
posted @ 2011-03-20 16:34 情有独钟 阅读(429) 评论(0) 推荐(0)

摘要: 1、将Invalidate()替换为InvalidateRect() Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。虫虫以前很懒,经常为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,但是事实是,如果你确实需要改善闪烁的情况,计算一个Rect所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。 2、禁止系统搽除你的窗口 系统在需要重画窗口的时候会帮你用指定的背景色来搽除窗口。可是,也许需要重画的区域也许非常小。或者,在你重画这些东西之间还要经过 阅读全文
posted @ 2011-03-20 16:33 情有独钟 阅读(333) 评论(0) 推荐(0)

摘要: 问题背景:窗体在重绘时,由于过频的刷新会引起闪烁现象——窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。绘制过程:当窗口整体需要重绘时,系统依次发送WM_NCPAINT、WM_ERASEBKGND、WM_PAINT三个独立的消息,即先绘制框架部分,再绘制客户区背景,最后绘制客户区,根据需要也可能只产生其中某一个消息响应。任何一个window组件的绘图,都是放在OnPaint、OnEraseBkgnd中。在设定上 OnEra 阅读全文
posted @ 2011-03-20 16:32 情有独钟 阅读(691) 评论(0) 推荐(0)

摘要: 数据库Ado操作类:AdoOperation Class//// 描述:// 1)打开连接时,会尝试连接三次,每次5秒// 2)Debug状态下运行时,每一个函数都有相应的信息输出// 3)执行结果信息有相应输出:// CString m_strExecuteResult; //执行结果// long m_lColumn; //执行结果返回的列数// long m_lRow; //执行结果返回的行数// vector<CString> m_vecColumnName;//执行结果返回的列名容器// 4)适用数据库:MS SQL SERVER / ORACLE//// Author: 阅读全文
posted @ 2011-03-20 16:31 情有独钟 阅读(379) 评论(0) 推荐(0)

摘要: m_list.SetExtendedStyle(LVS_EX_ONECLICKACTIVATE|LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);m_list.InsertColumn(0,"序号",LVCFMT_LEFT,60);m_list.InsertColumn(1,"地址",LVCFMT_CENTER,128);m_list.InsertColumn(2,"结果",LVCFMT_CENTER,80);m_list.InsertColumn(3,"状态",LVCFMT_CEN 阅读全文
posted @ 2011-03-20 16:30 情有独钟 阅读(567) 评论(0) 推荐(0)

摘要: 要在程序中创建新设计的控件,显然不能用自动创建的办法,因为对话框模板对新控件的特性一无所知.程序可以用手工方法创建控件,在调用派生类的Create函数时,派生类会调用基类的Create函数创建控件.用Create函数创建控件是一件比较麻烦的工作,程序需要为函数指定一大堆的控件风格以及控件的坐标和ID.特别是控件的坐标,没有经验的程序员很难确切地安排控件的位置和大小,往往需要反复调整.利用MFC的CWnd::SubclassDlgItem提供的动态连接功能,可以避免Create函数的许多麻烦,该函数大大简化了在对话框中创建派生控件的过程. 大家知道,在用手工方法创建控件时,先要构建一个控件对象, 阅读全文
posted @ 2011-03-20 16:29 情有独钟 阅读(655) 评论(0) 推荐(0)

摘要: 首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。而消息路由是指消息派送出去之后,系统(USER32.DLL)把消息投递到哪个窗口,以及以后消息在窗口之间的传递是怎样的。 消息分为队列消息(进入线程的消息队列)和非队列消息(不进入线程的消息队列)。对于队列消息,最常见的是鼠标 阅读全文
posted @ 2011-03-20 16:29 情有独钟 阅读(407) 评论(0) 推荐(0)

摘要: GetClassLong 函数功能:该函数返回与指定窗口相关的WNDCLASSEX结构的指定32位值。 函数原型:DWORD GetClassLong(HWND hWnd,int nlndex); 参数: hWnd:窗口句柄间接给出的窗口所属的类。 nlndex:指定要恢复的32位值。从额外的类存储空间恢复一个32位的值,指定的一个大于等于0的被恢复值的偏移量。有效值为从0开始到额外类存储空间字节数一4。例如,若指定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索引位8。要从WNDCLASSEX结构中恢复任何值,需要指定下面值之一: GCSW原子:获得一个唯一标识窗口类的原子 阅读全文
posted @ 2011-03-20 16:28 情有独钟 阅读(1621) 评论(0) 推荐(0)

摘要: MFC的CButton类提供Windows按钮控件的功能,从CButton类派生的CBitmapButton类封装了自绘制按钮的功能,使得程序员可以通过在按钮上绘制位图并为这些位图实例化类CBitmapButton的一个拷贝来创建按钮。在绘制位图按钮时,必须先设计好按钮所在的对话框及位图按钮在对话框中所对应的标准按钮,因为位图按钮实际上是标准按钮的一种特殊情况,只是按钮上显示的信息由用户来定制,而其余的消息映射响应和更新方法均相同,所以绘制位图按钮实际上也是定制按钮上各种显示信息的过程。下面介绍两种绘制位图按钮的基本方法:CBitmapButton类常用的成员函数有LoadBitmaps和Au 阅读全文
posted @ 2011-03-20 16:27 情有独钟 阅读(757) 评论(0) 推荐(0)

摘要: 阅读全文
posted @ 2011-03-20 16:27 情有独钟 阅读(409) 评论(0) 推荐(0)

摘要: 对于开始学vc的人,对于assert,assert_valid,verify,trace的宏感到很奇怪,总是觉得很难掌握似的,其实这些主要是没有理清楚他们各自宏之间深层次的意义。这些都是我平时的学习笔记,可能有些是网上的资源,如果有重复请大家不要见怪~ASSERT() ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息。在 Release 版本的程序中它不起任何作用。ASSERT()使用的时候必须保证参数表达式中不能有函数调用(译者注:ASSERT()宏在 Release 版本中不对表达式求值),因此对于任何有函数调用的参数表达式,应该使用宏 VERIFY(),以保证表达 阅读全文
posted @ 2011-03-20 16:26 情有独钟 阅读(389) 评论(0) 推荐(0)

摘要: CWnd::ModifyStyle 1.作用: 调用这个函数修改窗口的风格 2.函数原型: BOOL ModifyStyle ( DWORD dwRemove, DWORD dwAdd, UINT nFlags=0 ); 3.参数含义: dwRemove 指定修改时要删除的窗风格。 dwAdd 指定修改时将要增加的窗口风格。 nFlags 该参数将被传给SetWindowPos,否则为0,如果SetWindowPos不被调用的话,一般该参数默认值 4.返回值: 如果该函数成功调用返回一个非0值,否则返回0; 5.备注 如果nFlags不为0, ModifyStyle 将调用Windows AP 阅读全文
posted @ 2011-03-20 16:26 情有独钟 阅读(446) 评论(0) 推荐(0)

摘要: //首先在InitInstance()函数中创建一个同步对象,如果(GetLastError()返回ERROR_ALREADY_EXISTS就表明存在 //一个应用实例了,返回false取消 // 创建同步对象//By cryfishhMutexOneInstantance=CreateMutex(NULL,TRUE,_T("PreventSecondInstance"));if(GetLastError()==ERROR_ALREADY_EXISTS) bFound=TRUE;if(hMutexOneInstantance) ReleaseMutex(hMutexOneI 阅读全文
posted @ 2011-03-20 16:25 情有独钟 阅读(210) 评论(0) 推荐(0)

摘要: ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误原型定义:#include <assert.h> void assert( int expression_r_r_r );assert的作用是现计算表达式 expression_r_r_r ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看 阅读全文
posted @ 2011-03-20 16:25 情有独钟 阅读(377) 评论(0) 推荐(0)

摘要: 一、打开CD-ROMmciSendString("Set cdAudio door open wait",NULL,0,NULL);二、关闭CD_ROMmciSendString("Set cdAudio door closed wait",NULL,0,NULL);三、关闭计算机OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);GetVersionEx(&OsVersionInfo); / 阅读全文
posted @ 2011-03-20 16:23 情有独钟 阅读(268) 评论(0) 推荐(0)

摘要: VC中实现按钮提示,使用CToolTipCtrl2007年01月23日 星期二 20:09如果你需要对对话框上的一个按钮进行鼠标停靠提示,那么这么做:1. 在这个对话框的定义部分添加黑体部分:class CMyDlg : public CDialog{……CToolTipCtrl m_tt;……}2. 在这个对话框的OnInitDialog()函数里,添加黑体部分:BOOL CMyDlg::OnInitDialog(){…… EnableToolTips(TRUE); m_tt.Create(this); m_tt.Activate(TRUE); m_tt.AddTool(GetDlgItem 阅读全文
posted @ 2011-03-20 16:23 情有独钟 阅读(342) 评论(0) 推荐(0)

摘要: void CToolTestDlg::OnSize(UINT nType, int cx, int cy){CDialog::OnSize(nType, cx, cy);// TODO: 在此处添加消息处理程序代码switch(nType){case SIZE_MAXIMIZED:m_Edit.MoveWindow(200,100,cx/5,cy/8);break;case SIZE_RESTORED:if(m_Edit.GetSafeHwnd())//必须加上此判断,不然会出错m_Edit.MoveWindow(10,10,200,100);default:break;}} 阅读全文
posted @ 2011-03-20 16:22 情有独钟 阅读(459) 评论(0) 推荐(0)

摘要: 使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序);二是可以用来显示软件名称和版权等提示信息。怎样使用VC++制作应用程序的启动画面呢?本文提供四种方法,前三种适用于基于文档的应用程序,第四种适用于基于对话框的应用程序。 1.利用组件库中的Splash Screen组件实现 (1)用Photoshop等制作启动画面图像,保存为bmp格式。 (2)用Appwizard建一个基于单文档的工程Splash。 (3)在资源中插入位图资源 打开VC++的资源编辑器,用鼠标右键单击Resources文件夹,选择Import命令,插入所制作的位图。如果位图超过256色,VC会弹出一个对 阅读全文
posted @ 2011-03-20 16:22 情有独钟 阅读(307) 评论(0) 推荐(0)

摘要: 如何打开一个应用程序?ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );或ShellExecute(this->m_hWnd,"open","notepad.exe", "c:\\MyLog.log","",SW_SHOW );正如您所看到的,我并没有传递程序的完整路径。Q: 如何打开一个同系统程序相关连的文档?ShellExecute(this-> 阅读全文
posted @ 2011-03-20 16:21 情有独钟 阅读(3592) 评论(0) 推荐(0)

摘要: VC共享乐园------http://www.vcshare.net/VC入门专区------http://dev.yesky.com/vcbase/VC在线-------http://www.vczx.com/VC/MFC专区-----http://www.pconline.com.cn/pcedu/empolder/gj/vc/index.html#VC源码网------http://www.codepub.com/software/download-12-1.html 阅读全文
posted @ 2011-03-20 16:20 情有独钟 阅读(547) 评论(0) 推荐(0)

摘要: void CBtnWebDlg::OnBnClickedBtnBd(){// TODO: CString CmdLine=L"explorer.exe http://www.baidu.com/"; LPTSTR Cmd=(LPTSTR)(LPCTSTR)CmdLine;//类型转换,详见MSDN STARTUPINFO si={sizeof(si)}; //保存进程的启动信息 PROCESS_INFORMATION pi; //保存进程的相关信息 si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=1; //1窗口显示,0表示后 阅读全文
posted @ 2011-03-20 16:19 情有独钟 阅读(855) 评论(0) 推荐(0)

摘要: BOOL CDemoDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != N 阅读全文
posted @ 2011-03-20 16:18 情有独钟 阅读(480) 评论(0) 推荐(0)

摘要: unicode字符的数据类型type unsigned short wchar_t如定义99个字符为unicode的字符串和一个0结尾wchar_t szbuffer[100]unicode与ANSIC 函数的对照char * strcat(char *,const char*);wchar_t *wcscat(wchar_t*,const wchar_t*);int strcmp(const char*,const char *);int wcscmp(const wchar_t*,const wchar_t*);char * strcpy(char *,const char*);wchar 阅读全文
posted @ 2011-03-20 16:18 情有独钟 阅读(219) 评论(0) 推荐(0)

摘要: 内核知道有多少进程正在使用某个内核对象,因为每个对象包含一个使用计数。使用计数是所有内核对象类型常用的数据成员之一。当一个对象刚刚创建时,它的使用计数被置为1。然后,当另一个进程访问一个现有的内核对象时,使用计数就递增1。当进程终止运行时,内核就自动确定该进程仍然打开的所有内核对象的使用计数。如果内核对象的使用计数降为0,内核就撤消该对象。这样可以确保在没有进程引用该对象时系统中不保留任何内核对象。除了内核对象外,你的应用程序也可以使用其他类型的对象,如菜单、窗口、鼠标光标、刷子和字体等。这些对象属于用户对象或图形设备接口( G D I)对象,而不是内核对象。当初次着手为Wi n d o w 阅读全文
posted @ 2011-03-20 16:18 情有独钟 阅读(205) 评论(0) 推荐(0)

摘要: 在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下: 一.将信息写入.INI文件中 1.所用的WINAPI函数原型为: BOOL WritePrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName ); 其中各参数的意义 LPCTSTR lpAppName 是INI文件中的一个字段名. LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是 阅读全文
posted @ 2011-03-20 16:17 情有独钟 阅读(557) 评论(0) 推荐(0)

摘要: 函数名: SetWindowPos 头文件: winuser.h 函数原型: BOOL SetWindowPos ( HWND hWnd, //窗口句柄 HWND hWndInsertAfter, //排列顺序的句柄 int X, //水平坐标 int Y, //垂直坐标 int cx, //宽 int cy, //高 UINT uFlags //窗口定位标识 ); 说明: 这个函数能改变窗口的大小、位置和设置子窗口、弹出窗口或顶层窗口的排列顺序。 返回值: BOOL,如果返回值非零表示成功,返回零表示失败。错误信息请参看GetLastError函数。参数表: 参数 类型及说明 hwnd HW 阅读全文
posted @ 2011-03-20 16:15 情有独钟 阅读(1006) 评论(0) 推荐(0)

摘要: #import "c:\program Files\Common Files\System\ado\msado15.dll" \no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")写成多行时,行尾应加上“\” 阅读全文
posted @ 2011-03-20 16:14 情有独钟 阅读(261) 评论(0) 推荐(0)

摘要: VC中调用WebBrowser简单的实现过程(图解过程)VC 2010-12-25 16:09:01 阅读10 评论0 字号:大中小订阅 http://blog.csdn.net/SupermanKing/archive/2010/09/06/5866213.aspx 阅读全文
posted @ 2011-03-20 16:14 情有独钟 阅读(631) 评论(0) 推荐(0)

摘要: DrawText()函数与TextOut函数都是文本输出函数,但他们是有区别的。DrawText函数是格式化文本输时,功能较强大。该函数可以让文本输出时对齐,还可以让文本输出在适当的矩形内,超出时可以截断,int DrawText(LPCTSTR lpszString int nCount, //文本长度 LPRECT lpRect, //输出范围 UINT nFormat); //显示方式 阅读全文
posted @ 2011-03-20 16:13 情有独钟 阅读(790) 评论(0) 推荐(0)

摘要: #define new DEBUG_NEW在用vc时,利用AppWizard会产生如下代码: #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif 对于#define new DEBUG_NEW首先看msdn的解释:Assists in finding memory leaks. You can use DEBUG_NEW everywhere in your program that you would ordinarily use the new operato 阅读全文
posted @ 2011-03-20 16:13 情有独钟 阅读(733) 评论(0) 推荐(0)

摘要: 通常如果在关闭窗口之前需要保存数据,则可以在OnClose中设置 阅读全文
posted @ 2011-03-20 16:12 情有独钟 阅读(314) 评论(0) 推荐(0)

摘要: “String”(双引号)方式。采用该方式定义字符串,则编译器将从ANSI字符组成该字符串L“String”(L+双引号)方式。采用该方式定义字符串,则编译器使用Unicode字符。_T("String")(_T宏)方式。 采用MFC的_T宏定义字符处,如果定义了预处理程序符号_UNICODE,则编译器使用Unicode字符,否则编译器使用ANSI字符。 阅读全文
posted @ 2011-03-20 16:12 情有独钟 阅读(347) 评论(0) 推荐(0)

摘要: m_imageList.Create(16, 16, 0, 8, 8); // 32, 32 for large iconshIcon[0] = AfxGetApp()->LoadIcon(IDI_WHITE);hIcon[1] = AfxGetApp()->LoadIcon(IDI_BLACK);hIcon[2] = AfxGetApp()->LoadIcon(IDI_RED);hIcon[3] = AfxGetApp()->LoadIcon(IDI_BLUE);hIcon[4] = AfxGetApp()->LoadIcon(IDI_YELLOW);hIcon 阅读全文
posted @ 2011-03-20 16:11 情有独钟 阅读(327) 评论(0) 推荐(0)

摘要: 1.逻辑坐标 逻辑坐标是独立于设备的,它与设备点的大小无关。使用逻辑单位,是实现"所见即所得"的基础。当程序员在调用一个画线的GDI函数LineTo,画出25.4mm(1英寸) 长的线时,他并不需要考虑输出的是何种设备。若设备是VGA显示器,Windows自动将其转化为96个像素点;若设备是一个300dpi的激光打印机,Windows自动将其转化为300个像素点。 2.设备坐标 Windows将GDI函数中指定的逻辑坐标映射为设备坐标,在所有的设备坐标系统中,单位以像素点为准,水平值从左到右增大,垂直值从上到下增大。 Windows中包括以下3种设备坐标,以满足各种不同需要 阅读全文
posted @ 2011-03-20 16:10 情有独钟 阅读(966) 评论(0) 推荐(0)

摘要: OnInitialUpdate概括 视图窗口完全建立后第一个被框架调用的函数。框架在第一次调用OnDraw前会调用OnInitialUpdate,因此OnInitialUpdate是设置滚动视图的逻辑尺寸和映射模式的最合适的地方。 时间上,两者先后顺序不同,构造函数生成本类的对象,但没有产生窗口,OnCreate后窗口产生, 然后才是视图的OnInitialUpDate,一般在这里对视图的显示做初始化。简单点,就是ONCREATE只是产生VIEW的基本结构和变量而在OnInitialUpDate()中,主要初始化视图中控件等。对各个变量进行初始化操作。PreCreateWindow在OnCre 阅读全文
posted @ 2011-03-20 16:09 情有独钟 阅读(555) 评论(0) 推荐(0)

摘要: 阅读全文
posted @ 2011-03-20 15:50 情有独钟 阅读(184) 评论(0) 推荐(0)

摘要: 一.在SDK平台上,它的原型是:HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName);1.函数说明:该函数从与hInstance模块相关联的可执行文件中装入lpIconName指定的图标资源,仅当图标资源还没有被装入时该函数才执行装入操作,否则只获取装入的资源句柄2.参数说明:lpIconName是指向NULL字符结尾的字符串的指针,它包含图标名.如果要使用windows预定义的图标,这是hInstance必须设置成NULL,lpIconName则可以是下列值: IDI_APPLICATION:32512 IDI_QUESTION:332 阅读全文
posted @ 2011-03-20 15:49 情有独钟 阅读(1375) 评论(0) 推荐(0)

摘要: 第10章 CWinApp类每个MFC程序都包含一个CWinApp类的实例. 它实现主事件循环并把事件分发给MFC中其他类.10.1 成员变量m_pszAppName 应用程序名称m_hInstance 当前实例的句柄m_hPrevInstance 上一个实例的句柄m_lpCmdLine 用于调用的命令行的一个拷贝m_nCmdShow 指定窗口初始时的显示方式m_bHelpMode 如果应用程序处于Help文档模式则为TRUEm_pActiveWnd 如果应用程序是OLE服务方式并且当前处于活动状态.则它指向容器主窗口m_pszExeName EXE文件的名称m_pszHelpFilePath 阅读全文
posted @ 2011-03-20 15:44 情有独钟 阅读(791) 评论(0) 推荐(0)

摘要: 在OnEraseBkgnd(CDC *pDC)没有擦除原来的图,而是直接再贴上去。而在OnPaint()中要先擦除之前的图,然后再重绘所以使用OnEraseBkgnd闪烁比较小。 阅读全文
posted @ 2011-03-20 15:42 情有独钟 阅读(227) 评论(0) 推荐(0)

摘要: 物理HDC 设备底层会拥有显存等资源,但是兼容DC并没有给图像像素提供内存空间,因此兼容DC总是和BITMAP配合使用,这样一来,兼容DC就利用BITMAP的图像像素数据空间给自己提供类似于显存的内存空间.这样有很多好处,以来我们可以在加载图片后,在图片上利用DC的各种绘图功能.请看如下示例:兼容DC在建立之初,只有1*1像素的尺寸,SelectObject选择bitmap以后才可以进行绘图.内存DC的可见区域是简单的区域,不像物理DC可见区域可能被其他窗口覆盖而产生复杂的可见区域.由于DC的任何绘图都需要考虑在可见区域内绘图,绝对不能超出可见区域的范围.因此每个GDI绘图输出最终都需要和构成 阅读全文
posted @ 2011-03-20 15:42 情有独钟 阅读(489) 评论(0) 推荐(0)

摘要: 函数功能:该函数创建与指定的设备环境相关的设备兼容的位图。 函数原型:HBITMAP CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight); 参数: hdc: 设备环境句柄。 nWidth:指定位图的宽度,单位为像素。 nHeight:指定位图的高度,单位为像素。 返回值:如果函数执行成功,那么返回值是位图的句柄;如果函数执行失败,那么返回值为NULL。若想获取更多错误信息,请调用GetLastError。 备注:由CreateCompatibleBitmap函数创建的位图的颜色格式与由参数hdc标识的设备的颜色格式匹配。该位图可以选入任 阅读全文
posted @ 2011-03-20 15:41 情有独钟 阅读(730) 评论(0) 推荐(0)

摘要: 阅读全文
posted @ 2011-03-20 15:17 情有独钟 阅读(440) 评论(0) 推荐(0)

摘要: CRect rect;GetDlgItem(IDC_SAMPLE)->GetWindowRect(&rect);GetWindowRect得到的是屏幕坐标ScreenToClient(rect)将屏幕坐标转换为客户区坐标 阅读全文
posted @ 2011-03-20 15:16 情有独钟 阅读(399) 评论(0) 推荐(0)

摘要: FromHandle给出一个window对象句柄,返回一个相应对象的指针如:CBrush::FromHandlestatic CBrush* PASCAL FromHandle( HBRUSH hBrush );CFont::FromHandle static CFont* PASCAL FromHandle( HFONT hFont ); 阅读全文
posted @ 2011-03-20 15:15 情有独钟 阅读(2320) 评论(0) 推荐(0)

摘要: CColorDialog dlg;dlg.m_cc.Flags|=CC_RGBINIT | CC_FULLOPEN // "|" 组合符不能去掉,因为Flags会有个默认值dlg.m_cc.rgbResult=m_clr;//保存上一次选择的结果if(IDOK==dlg.DoModal()){m_clr=dlg.m_cc.rgbResult; //选择的结果}}CFontDialog dlg;if(IDOK==dlg.DoModal()){if(m_font.m_hObject)m_font.DeleteObject();m_font.CreateFontIndirect( 阅读全文
posted @ 2011-03-20 15:15 情有独钟 阅读(477) 评论(0) 推荐(0)

摘要: 如果你希望能够在自己的程序中表现出新意,那么你一定不会仅仅满足于MFC提供那些标准控件。这时,我们就必须自己另外多做些工作了。就改变控件外观这一点来说,主要是利用控件的自绘功能(Owner Draw)实现的。本篇将和各位一起定义一个XP风格的CXPButton按钮类,目的不在于介绍CXPButton类的使用技巧,而在于向各位阐述实现自绘按钮的方法。当然如果你觉得CXPButton有用的话,也可以把它的源文件保存下来,直接加入到自己的项目中。本篇要点:一、准备工作二、实现原理及难点三、按钮类的使用四、小结与提示五、附录 一、准备工作在开始编码之前,首先应该确定好,更准确的说应该是设计好按钮在各种 阅读全文
posted @ 2011-03-20 15:14 情有独钟 阅读(432) 评论(0) 推荐(0)

摘要: 在每一个控件需要被绘制时都会调用OnCtlColor,因此会被调用多次对话框背景绘制时会被调用一次,其次是对话框上的子控件绘制时会调用!HBRUSH CMultiThreadDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);CFont * cFont=new CFont;cFont->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0, ANSI_CHARSET,OUT_DEFAU 阅读全文
posted @ 2011-03-20 15:14 情有独钟 阅读(1112) 评论(0) 推荐(0)

摘要: 最近经常使用回调函数,有时感觉有点混乱,对回调函数理解不透,昨天花点时间深深品味了一下回调函数,写下博客记录一下,言规正转,VC中的定时器是一种特殊的回调函数,只要我们设置好了定时器,我们就不用管什么时候调用定时器处理函数,是操作系统负责调用,定时器的处理函数还是我们自己去写实现。 为什么 要用回调函数呢,这个问题我也想过,现在先说说回调函数的定义 和使用,过下在回答为什么 要使用回调函数, 下面这个例子是处理从一个普通的C++类CTest中把数据传到一个对话框类CTestCALLDlg中去,这里不能用消息来处理,因为消息只能处理线程和对话框之间的数据传输,对纯C++不起作用,这种情况 下,就 阅读全文
posted @ 2011-03-20 15:13 情有独钟 阅读(3207) 评论(0) 推荐(1)

摘要: 什么是函数指针函数指针是指向函数的指针变量。也就是说,它是一个指针变量,而且该指针指向一个函数。对于指针变量来说,它的值是它指向的变量的地址。举个例子:指针变量pi是指向一个整型变量i的指针,则变量i的地址 &i 就是指针变量pi的值。也就是说整型变量指针指向一个整型变量,而整型变量指针的值就是它所指的整型变量的地址。与其它类型指针变量一样,函数指针变量的值就是它指向的函数的地址。那么什么是函数的地址呢?我们首先来看函数调用是怎么回事。在程序运行时,一个函数占用一段连续的内存。当调用一个函数时,实际上是跳转到函数的入口地址,执行函数体的代码,完成后返回。函数指针指向一个函数的入口地址, 阅读全文
posted @ 2011-03-20 15:13 情有独钟 阅读(8112) 评论(0) 推荐(2)

摘要: 建立一个"单文档,数据库支持"的工程中,在向导第六步中把用户视图的基类改为CView,在编程中就有了ondraw函数(成员函数),而在CFormView情况下就没有ondraw函数CFormView是CView类的派生类,在CFormView类里可以放很多控件的.用户视图基类选择什么是由你想做什么样的功能的程序来决定的 阅读全文
posted @ 2011-03-20 15:12 情有独钟 阅读(748) 评论(0) 推荐(0)

摘要: http://hi.baidu.com/ldw_bb/blog/item/5edf1fc8046e4e8ac8176812.html 阅读全文
posted @ 2011-03-20 15:12 情有独钟 阅读(165) 评论(0) 推荐(0)

摘要: SkinMagic使用方法2008-09-06 17:042.0版把corona.smf,SkinMagicLibMD6.lib,SkinMagicLib.h考入程序文件夹中.在stdafx.h中添加代码#include "SkinMagicLib.h"//#pragma comment(lib, "SkinMagicLibMD6Trial.lib")#pragma comment(lib, "SkinMagicLibMD6.lib")/* 当在Project/Setting/General中选择"Use MFC in a 阅读全文
posted @ 2011-03-20 15:11 情有独钟 阅读(3543) 评论(0) 推荐(0)

摘要: CJLib(mfc扩展开发包,是xtreme toolkit的前生,但xtreme toolkit收费了)http://www.codejock.com/BCGControlBar(收费,mfc扩展开发包,功能很强大)http://www.bcgsoft.comSkinMagic(收费,看起来像Office)http://appspeed.com/html/download.htmlAppFace(收费,支持 mfc ,VCL,ATL , WTL 框架 )http://www.appface.com/chs/index.htmSKin++(收费,界面很好看)http://www.uipower 阅读全文
posted @ 2011-03-20 15:10 情有独钟 阅读(1056) 评论(1) 推荐(0)

摘要: file://将SeverSock设置为异步非阻塞模式,并为它注册各种网络异步事件,其 中 m_hWnd file://为应用程序的主对话框或主窗口的句柄 if(WSAAsyncSelect(ServerSock, m_hWnd, NETWORK_EVENT, FD_ACCEPT | FD_CLOSE | FD_READ | FD_WRITE) == SOCKET_ERROR) { MessageBox("注册网络异步事件失败!"); WSACleanup(); return FALSE; } listen(ServerSock, 5); file://设置侦听模式 ret 阅读全文
posted @ 2011-03-20 15:09 情有独钟 阅读(237) 评论(0) 推荐(0)