随笔分类 -  VC文档

上一页 1 2 3 4 5 6 7 8 9 下一页
多线程编程之二——MFC中的多线程开发
摘要:五、MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。 在MFC中,一般用全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用于创建工作者线程 阅读全文
posted @ 2011-03-22 00:24 °ι 、曲 终 阅读(191) 评论(0) 推荐(0) 编辑
多线程编程之三——线程间通讯
摘要:七、线程间通讯 一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信。这种线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的,下面将进行说明。使用全局变量进行通信由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。对于标准类型的全局变量,我们建议使用volatile 修饰符,它告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。如果线程间所需传递的信息较复杂,我们可以定义一个结构,通过传递指向该结构的 阅读全文
posted @ 2011-03-22 00:24 °ι 、曲 终 阅读(173) 评论(0) 推荐(0) 编辑
多线程编程之一——问题提出
摘要:一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //延时6秒}编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。二、多线程概述 进程和线程都是操作系统的概念 阅读全文
posted @ 2011-03-22 00:23 °ι 、曲 终 阅读(248) 评论(0) 推荐(0) 编辑
游戏截屏(解决游戏答题思路的一种) [C++]
摘要:CRect GameRect;//保存游戏窗口矩形用 if (theApp.m_hGameHand !=NULL)//这个需要自己去保存游戏窗口句柄我保存在theApp.m_hGameHand 里 { ::ShowWindow(theApp.m_hGameHand,SW_SHOW);//把游戏显示出来 ::PostMessage(theApp.m_hGameHand,WM_SYSCOMMAND,SC_RESTORE,0);//防止游戏最小化, Sleep(200);//防止游戏窗口未弹出 //让游戏窗口置顶 ::SetWindowPos(theApp.m_hGameHand,HWND_TOPM 阅读全文
posted @ 2011-03-20 14:38 °ι 、曲 终 阅读(596) 评论(0) 推荐(0) 编辑
读取网页的内容
摘要:void CMy7877Dlg::OnOK() {// TODO: Add extra validation hereUpdateData(TRUE);CInternetSession session("HttpClient"); url = m_a; CHttpFile* pfile = (CHttpFile *)session.OpenURL(url); DWORD dwStatusCode; pfile -> QueryInfoStatusCode(dwStatusCode); if(dwStatusCode == HTTP_STATUS_OK) { CStri 阅读全文
posted @ 2011-03-04 10:53 °ι 、曲 终 阅读(298) 评论(0) 推荐(0) 编辑
托盘编程例子
摘要:有关托盘编程的基础知识呢,也就上面这些了。下面呢,我们就进入具体的实战演练阶段,举几个托盘编程的例子瞧瞧,加深理解。  1、将程序最小化到系统托盘区的函数toTray()。void CTimeWakeDlg::toTray(){NOTIFYICONDATA nid;nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);nid.hWnd=this->m_hWnd;nid.uID=IDR_MAINFRAME;nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;nid.uCallbackMessage=WM_SHOWTASK;//自定义 阅读全文
posted @ 2011-02-20 16:03 °ι 、曲 终 阅读(353) 评论(0) 推荐(0) 编辑
窗体的扩展样式GWL_EXSTYLE: 用于SetWindowLong
摘要:SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT or WS_EX_LAYERED ); WS_EX_ACCEPTFILES = 0x00000010 指明了一个已创建视窗具有拖拽文件功能 WS_EX_APPWINDOW = 0x00040000 强制一个可见的顶级视窗到工具栏上 WS_EX_CLIENTEDGE = 0x00000200 使一个视窗具有凹陷边框 WS_EX_COMPOSITED = 0x02000000 Windows XP:将一个窗体的所有子窗 阅读全文
posted @ 2011-02-20 16:02 °ι 、曲 终 阅读(324) 评论(0) 推荐(0) 编辑
VC中的CWnd指针和HWnd的区别于联系
摘要:HWND是Windows系统中对所有窗口的一种标识,即窗口句柄。这是一个SDK概念。 CWnd是MFC类库中所有窗口类的基类。微软在MFC中将所有窗口的通用操作都封装到了这个类中,如:ShowWindow等等,同时它也封装了窗口句柄即m_hWnd成员。由HWnd得到CWnd*:CWnd wnd;HWnd hWnd;wnd.Attach(hWnd);通常一个窗口资源已经和一个CWnd类的对象关联起来的,由于一般来说这个类是自己创建的,所以自然知道怎么得到指向这个类的指针。如果没有就创建一个CWnd对象,将这个对象与窗口资源的hWnd句柄关联起来。(如上边的语句)。如果用static CWnd* 阅读全文
posted @ 2011-02-20 16:00 °ι 、曲 终 阅读(502) 评论(0) 推荐(0) 编辑
VARIANT与C/C++数据类型转换类
该文被密码保护。
posted @ 2011-02-20 15:59 °ι 、曲 终 编辑
用VC++生成接口的COleDispatchDriver包装类来调用COM组件
摘要:一般地,可以使用CoCreateInstance来调用COM组件。但对于实现了IDispatch接口的COM组件,还有更容易的方法——用VC++自动生成接口的COleDispatchDriver包装类来调用COM组件。举例说明:在VC++中执行脚本语句,比如VBScript语句。系统提供了一个控件:C:\WINDOWS\system32\msscript.ocx,它提供了一个叫做IScriptControl的接口,通过它,我们就可以执行脚本语句了。1.用VC++自动创建包装类用VC++建立一个支持MFC的工程,添加一个类,选择“类型库中的MFC类&rdquo 阅读全文
posted @ 2011-02-19 21:44 °ι 、曲 终 阅读(2600) 评论(0) 推荐(0) 编辑
VC怎样调用COM控件的接口函数
摘要:COM库函数 -------------------------------- 利用COM库函数使用代码组件的方法是本文介绍的三种方法中实现起来最麻烦和困难的方法。它要求开发人员必须具有对COM原理的深入理解。该方法实现步骤如下: 1. 首先添加COM初始和终止代码。在应用程序类的初始化实例函数InitInstance()中添加如下代码: CoInitialize(NULL); …… CoUnInitialize(); 上述语句运行在MFC框架/非MFC框架中,但由于本文程序使用MFC框架,所以也可以利用AfxOleInit()函数对其进行初始化。 2. 然后用#i 阅读全文
posted @ 2011-02-19 21:41 °ι 、曲 终 阅读(697) 评论(0) 推荐(0) 编辑
vc防止运行多个程序,重复运行,同一个程序
摘要:在App::InitInstance()中加入把m_pszAppName换成你程序的GUIDe值即可。一般在stdafx.h有,例如 #if !defined(AFX_STDAFX_H__A5EA48F2_0257_4B04_B771_A2E1635741D8__INCLUDED_) #define AFX_STDAFX_H__A5EA48F2_0257_4B04_B771_A2E1635741D8__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 则GUID为:A5EA48F2_0257_4 阅读全文
posted @ 2011-02-16 16:41 °ι 、曲 终 阅读(772) 评论(0) 推荐(0) 编辑
鼠标移到cstatic,改变光标/鼠标。 setcursor
摘要:老哥刚好有这样一段现成的程序,功能比你的不多一点:增加了改变为红色的功能,还是比较简单: 1 定义手形鼠标资源: #ifndef IDC_HAND #define IDC_HAND MAKEINTRESOURCE(32649) #endif 2 定义好字体变色色开关bool m_bColorSwitchOpened;不为TRUE时字体变红,初始化为FALSE, 3 定义下画线函数,以便于调用 4 增加WM_CTLCOLOR消息函数,以改变CStatic的颜色和加上下划线 4 增加WM_MOUSEMOVE消息函数,当鼠标移到CStatic上时为手形鼠标,并触发改变字体颜色开关 阅读全文
posted @ 2011-02-16 16:39 °ι 、曲 终 阅读(969) 评论(0) 推荐(0) 编辑
shellexecute 和 createprocess,运行一个程序直到其结束,偷偷运行一个程序
摘要:如何打开一个应用程序? ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );或 ShellExecute(this->m_hWnd,"open","notepad.exe","c:\\MyLog.log","",SW_SHOW );正如您所看到的,我并没有传递程序的完整路径。Q: 如何打开一个同系统程序相关连的文档? ShellExecute(this->m_hWnd,"open", "c:\\abc.txt","","",SW_SHOW );Q: 如何打开一个网页? ShellExecute(this-& 阅读全文
posted @ 2011-02-16 16:37 °ι 、曲 终 阅读(332) 评论(0) 推荐(0) 编辑
怎么侦测USB端口上有设备插拔
摘要:WM_DEVICECHANGLE消息,nEventType为DBT_DEVICEARRIVAL且dwData = 7时就是U盘连接事件(没弄错的话)我想RegisterDeviceNotification中参数DEV_BROADCAST_DEVICEINTERFACE结构体的GUID dbcc_classguid;为设备的GUID,填什么参数啊? 阅读全文
posted @ 2011-02-16 16:35 °ι 、曲 终 阅读(733) 评论(0) 推荐(0) 编辑
对话框嵌入到对话框 或者:窗口嵌入到窗口,一个窗口嵌入到另一个窗口
摘要:1、用vc新建一个dialog1工程。属性默认。2、insert一个dialog2,改为child。3、在dialog1中包含dialog2头文件,在一个按钮事件中显示dialog2:Cdialog2 *p = new Cdialog2(this);p->Create(IDD_Dialog2);p->SetParent(this);//设置dialog1为父窗口p->ShowWindow(SW_SHOW);这样,dialog2便嵌到dialog1了,比用tabcontrol方便吧。现在很多应用程序的“设置”界面应该就是这样做的。 阅读全文
posted @ 2011-02-16 16:33 °ι 、曲 终 阅读(415) 评论(0) 推荐(0) 编辑
获取当前程序所在路径/目录
摘要:char path_buffer[_MAX_PATH]; char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; GetModuleFileName(NULL, path_buffer, _MAX_PATH); _spli... 阅读全文
posted @ 2011-02-16 16:32 °ι 、曲 终 阅读(297) 评论(0) 推荐(0) 编辑
VC读写INI文件
摘要:在VC中读写INI文件相对比较简单,读INI文件我们只需用到GetPrivateProfileString系统API,而写INI文件也只需用到WritePrivateProfileString系统API,他们的使用例子如下:读:写: 阅读全文
posted @ 2011-02-15 11:25 °ι 、曲 终 阅读(310) 评论(0) 推荐(0) 编辑
在VC6.0下设置Unicode编译环境
摘要:VC++ 6.0支持Unicode编程,但默认的是ANSI,所以开发人员只需要稍微改变一下编写代码的习惯便可以轻松编写支持UNICODE的应用程序。 使用VC++ 6.0进行Unicode编程主要做以下几项工作: 1、为工程添加UNICODE和_UNICODE预处理选项: 具体步骤:打开[工程]->[设置…]对话框,在C/C++标签对话框的“预处理程序定义”中去除_MBCS,... 阅读全文
posted @ 2011-02-15 11:25 °ι 、曲 终 阅读(228) 评论(0) 推荐(0) 编辑
VC设置程序热键
摘要:为程序设置热键就是用到一个RegisterHotKey系统API。当然些API的使用相对简单,但也需要注意一些地方,所以在使用API前请参考MSDN相关文档。本文只给出一个设置程序热键的例子代码如下:1.在OnInitDialog中调用RegisterHotKey设置热键RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,'S');2.在对话框的头文件中声明热键处理函数afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);3.在对话框的实现文件中实现热键处理函数LRESULT CTestDlg: 阅读全文
posted @ 2011-02-15 11:24 °ι 、曲 终 阅读(1146) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 下一页