![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
windows api 和 MFC
文章平均质量分 75
midle110
人生就是在不断的感悟中成长
展开
-
windows API 菜鸟学习之路(一)
从今天开始学习 windows api编程,记录菜鸟学习的点点滴滴首先从线程开始直接上函数msdn上面的函数原型HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD 指向SECURITY_ATTRIBUTES型态的结构的指针,一般是0 SIZE_T dwStackSize,原创 2012-03-14 11:00:01 · 3511 阅读 · 0 评论 -
StretchBlt()函数使用
StretchBlt函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。说白了功能就是缩放。 函数原型如下 函数原型:BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeighDest, HDC hdcSrc, int n原创 2012-10-12 08:42:56 · 13601 阅读 · 0 评论 -
匿名管道 c++实现
匿名管道是一种未命名的、单向管道通常用来在一个父进程和一个子进程之间传输数据。匿名的管道只能实现本地机器上两个进程间的通信而不能实现跨网络的通信。 #include #include using namespace std;int main(int argc, char* argv[]){ HANDLE hpiperead = NULL , hpipewrite =原创 2012-09-26 08:48:00 · 3336 阅读 · 1 评论 -
GetBitmapBits和GetDIBits的区别(Windows GDI)
Windows GDI中有两个用来得到位图图像数据的API,分别是GetBitmapBits和GetDIBits;按照MSDN的解释,前者是用来得到设备独立位图的BITS,后者是得到兼容位图的BITS,所以在调用该函数的时候,第一个主要的区别是:GetDIBits需要提供一个设备内容,同时需要将位图的HANDLE选进这个设备内容(DC)才能能够得到位图的信息。我想上面的区别转载 2012-10-16 12:15:41 · 9539 阅读 · 1 评论 -
关于MFC里面位图相关的操作
说实话,最近一段时间由于项目的关系,不得不和MFC里面的图形东西打交道。在mfc里面感觉CBITMAP里面的一些函数像是被微软抛弃了,按部就班的创建一个24位图像却始终不能成功。最后转向DIB来创建。然后显示也是一样的,感觉MFC里面很多东西都被抛弃了,很多都不能成功。下面是创建24位位图,并且将位图保存到bmp文件里面的代码: CDC *pdeskdc = GetDeskt原创 2012-10-28 16:23:03 · 1599 阅读 · 0 评论 -
socket编程(二) select 模型
select 模型是winsock中最常见的I/O模型,主要是它能够防止程序在套接字处于阻塞模式的时候经过一次I/O操作后被阻塞,同时也能够防止套接字处于非阻塞模式产生的WSAEWOULDBLOCK错误select模式也是最简单的一个I/O模式 int select( int nfds,fd_set FAR* readfds,fd_set FAR* writefds,fd_原创 2012-09-01 09:31:33 · 2002 阅读 · 0 评论 -
线程同步--关键代码段(二)
在我们接触到的多线程书籍里面,提到最多的就是线程同步问题了。但是,我们看到最多的例子也是对一个临界资源的访问。但是当我们自认为感觉靴子很好的时候,问题出现了,怎么才能够使我们让线程按照一定的顺序访问。其实我们学习的东西就已经可以使用了,只是我们受到书籍的影响导致我们写不出来而已。当然,学习多线程,操作系统学习是避免不了的!下面就是我写的代码主要实现一个功能:A和B必须同原创 2012-11-14 09:06:57 · 931 阅读 · 0 评论 -
线程同步--关键代码段(一)
线程同步有四种方式但是在一个进程中,效率最高的,方式是 :关键代码段 #include #include #include #include using namespace std;DWORD WINAPI ListProc1( LPVOID lpParameter ); // list1线程函数DWORD WINAPI ListProc2( LPVOID原创 2012-09-20 17:49:35 · 1066 阅读 · 0 评论 -
线程同步--关键代码段(三)
前面讲述了如何使用关键代码段。但是关键代码段还有一些不为人知的秘密,也是多数程序员忽略的东西,特别是在多核cpu上面,我们必须知道的东西。下面是《windows核心编程》这本书里面的一段话。插一句话,搞windows编程的此书必看,本人正在读中,感觉就是醍醐灌顶!当线程试图进入另一个线程拥有的关键代码段时,调用线程就立即被置于等待状态。这意味着该线程必须从用户方式转入内核方式(大约原创 2012-11-15 19:44:45 · 1498 阅读 · 0 评论 -
TCP粘包问题
最近需要用TCP传输大量数据,但是中间出现了一些问题。又问本人菜鸟,什么都是自己摸索!其中就出现了粘包问题。粘包问题可以看看下面的链接,下面讲解的很详细粘包问题链接:点击打开链接 而我发送的大量数据包,每次发送的长度不相等。微软对TCP发送的数据优化算法还是有用的,可以不需要设置“发送不延迟”。所以就在每次发送数据包的开头定义一个定长大小的结构体,里面描述一些原创 2012-11-18 21:56:03 · 976 阅读 · 0 评论 -
线程同步--事件内核对象
现实程序中有时候我们需要对线程执行顺序更加严格的要求。前面讲到的关键代码段就不适用了。关键代码段最大的有点就是用户在用户态执行就可以了,不需要进入内核状态。从而减少了进入内核所用的时间。所以如果如果能够使用关键代码段就使用关键代码段。最后选择内核对象进行同步!事件内核对象是内核对象同步的其中一种。解释一下内核对象的状态。内核对象有两种状态:已通知状态和未通知状态。通原创 2012-11-19 21:45:51 · 1540 阅读 · 0 评论 -
闲来无事,仿了一个百度杀毒主界面
15号就去深圳找工作了,现在课程基本上上完了,但是有一个老师硬是要我们把实验搞完才能离开,这几天没事,画了两天仿了百度杀毒主界面,就一个窗口,第一次搞仿,和论坛里面的大神是没法比的。里面还有很多东西需要写,感觉MFC画界面好麻烦,做到这里就不做了,最下面是代码。下面是截图代码在这里:http://download.csdn.net/detail/midle110/652原创 2013-11-08 17:02:07 · 1867 阅读 · 0 评论 -
volatile 用处
使用多线程的时候会用到volatile,volatile告诉编译器原创 2014-08-03 21:18:59 · 560 阅读 · 0 评论 -
c++ 截取屏幕图片并保存
屏幕捕捉技术第一步就是抓取屏幕的桌面虽然print screen键可以,但是在实际中就有点不适用了下面的代码可以拷贝到一个函数里面,执行就可以生成一个获取屏幕的bmp文件了 //获取桌面窗口的CDC CDC *pdeskdc = GetDesktopWindow()->GetDC(); CRect re; //获取窗口的大小 GetDesktopWindow()->G原创 2012-09-19 10:11:55 · 3894 阅读 · 1 评论 -
枚举进程ID并且获得进程路径
枚举进程在vc里面一般用CreateToolhelp32Snapshot()函数这个函数的作用是给系统内的所有进程拍一个快照CreateToolhelp32Snapshot 用于获取系统内指定进程的快照,也可以获取被这些进程使用的堆、模块和线程的快照。函数的具体用法是。HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,原创 2012-09-27 22:06:21 · 5384 阅读 · 1 评论 -
动态链接库编程
动态链接库编写基本上可以分为五种方法从使用角度来看,编写程序只有一种最实用! Visual C++支持三种DLL: Non-MFCDLL(非MFC动态库) MFCRegular DLL(MFC规则DLL) MFCExtension DLL(MFC扩展DLL)最常用的当然是Non-MFCDLL,不仅mfc可以用其他的也可以用!原创 2012-09-08 17:22:59 · 807 阅读 · 0 评论 -
windows API 菜鸟学习之路(二)
对于昨天的运行结果,在别人的笔记本上面运行了几次,每次都是create thread succeed !和create thread succeed !parameter is 1 这两种现实但是我的笔记本确实显示了两个create thread succeed ! 最后上百度看到一大神说是多核引起的,貌似感觉是的,修改了可以正常运行了 代码如下//原创 2012-03-15 11:21:28 · 646 阅读 · 0 评论 -
windows API 菜鸟学习之路(三)
今天自学的是MFC里面的 进度条, MFC创建的框架里面添加一个进度条控件,名字改为IDC_PG; OnInitDialog()函数里面插入下面的代码 CProgressCtrl *pg = (CProgressCtrl *)GetDlgItem(IDC_PG); //获取控件指针 pg->SetRange(0 , 10000); //设置进度条范围原创 2012-03-16 16:25:27 · 1037 阅读 · 1 评论 -
windows API 菜鸟学习之路(四)
昨天说今天写一个Windows下载器的,早上一上午的选修课,逃不掉,现在的老师基本上都点名,悲剧啊········进入正题吧,写好的东西下面是截图 昨天的进度条可能会卡死,但是可以调用线程解决。今天的代码里面会涉及就不再详细讲解了进入今天的正题void CProgress_02Dlg::OnOK() { // TODO: Add extra validat原创 2012-03-17 17:33:55 · 689 阅读 · 0 评论 -
VC ado连接数据库
ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。下面我将讲一下怎么连接数据库ADO连接数据库分为四步(1)初始化COM库,引入ADO库定原创 2012-05-04 14:38:56 · 1551 阅读 · 3 评论 -
线程学习二
本次学习 线程传值问题相信大家都想到过线程函数应该和一般的函数一样,可以传递值吧这次就来学习线程传值其实创建线程函数里面就有一个参数用来传值的HANDLE CreateThread ( SEC_ATTRS SecurityAttributes,ULONG StackSize,SEC_THREAD_START StartFunction,PVOID Thre原创 2012-07-04 13:05:19 · 685 阅读 · 0 评论 -
线程学习三
前两次学习都是只创建一个线程这次我们写一个多线程的模拟器下面我们将认识两个函数DWORD SuspendThread(HANDLE hThread);这个函数是将线程挂起,也就是暂停的意思参数 hThread 是线程句柄线程挂起之后需要调用另一个函数将线程唤醒DWORD ResumeThread(HANDLE hThread);参数hTh原创 2012-07-05 17:42:50 · 857 阅读 · 0 评论 -
贴一个数据结构老师布置的作业(各种排序) c 语言实现
作业要求是能实现直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,直接选择排序,堆排序,归并排序,基数排序。那天弄了大半天的,调试什么的 ·····最后搞起了// 12.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdlib.h"#原创 2012-05-27 09:59:33 · 966 阅读 · 0 评论 -
vc++ cfile 文件操作
文件操作是最基本的操作,所以学习文件编程很有必要,今天就写一下文件相关的操作本来菜鸟一只,写博客就是说明我一直在努力!一直在进步!cfile里面的函数大家可以去msdn上面看一下cfile的文件操作一般分为三个步骤(自己分类的,要是大神看见了不要批我)1.打开文件2.文件的读写3.文件的关闭第一步:文件打开 CFile file; if(0 =原创 2012-05-06 10:24:54 · 6664 阅读 · 1 评论 -
VC 写 TXT 文件分割器 附代码
TXT文件分割器主要将很大的TXT文档分割成预定大小的文档主要通过cfile类来实现这就是最后的效果。选择路径主要通过cfiledlg类来实现 // TODO: Add your control notification handler code here CFileDialog file_dlg(true , NULL , NULL , OFN_OVERWRITEPROMP原创 2012-05-06 22:19:11 · 1215 阅读 · 0 评论 -
线程学习一
首先我们要明白为什么要学习线程,线程学习了有什么好处?举一个很简单的例子MFC实现在MFC里面添加一个按钮IDC_START双击添加代码:Sleep(9000);然后编译运行看看 你会发现程序有9秒的“卡死”时间! 问题发现了,下面就来解决问题 进程与线程的概念就不讨论了 ,只要知道,一般的 一个程序只有一个进程一原创 2012-07-03 20:45:39 · 627 阅读 · 0 评论 -
Socket I/O模型全接触
声明:除CSDN外的任何媒体转载必须注明作者以及“转载自CSDN”。本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教。 一:select模型 二:WSAAsyncSelect模型 三:WSAEventSelect模型 四:Overlapped I/O 事件通知模型 五:Overlapped转载 2012-08-12 20:00:28 · 1418 阅读 · 0 评论 -
lpvoid 在 win32 api 中的使用
lpvoid在msdn中的描述为:LPVOID Generic pointer type, equivalent to (void *). Should be used instead of LPSTR.可以理解为 void *但是在使用的时候经常感到疑惑。比如创建线程 传值的时候 会碰到这个类型HANDLE CreateThread ( SEC_ATTRS Se原创 2012-07-28 20:50:51 · 1657 阅读 · 0 评论 -
socket编程(一)最简单的c/s模式
最简单的C/S模式是经典的入门模式,也是大多数教材讲解最多的,总的来说分为下面的几个步骤左边为 客户端模式,右边为服务器模式服务器模式相对复杂一点,这一点是肯定的,因为服务器面对很多不同的客户端的连接。相关函数不解释,入门级别的书本上都有,而且讲解的非常详细。这里不多做介绍! 下面是服务器模式,只负责接收信息#include #include #pragma c原创 2012-08-31 20:52:37 · 7011 阅读 · 0 评论 -
MFC调试小技巧
今天看acl源代码的时候看到一个函数AllocConsole(),百度一下感觉这个函数对于调试很不错,当然对于MFC里面的调试信息,我都是用TRACE打印自己感兴趣的消息的,并且只有在DEBUG里面才会打印,发布版本不会,很适合调试。今天看到这个函数,哪个版本都可以打印,觉得还是挺方便的。感觉百度百科说的不错,就直接复制过来AllocConsole 函数为调用进程分原创 2014-07-30 20:55:40 · 2282 阅读 · 0 评论