![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
windows程序设计之旅
_taylorZ
成就感源于克服困难,要自信,仰望星空,脚踏实地
展开
-
MFC创建线程
学着视频做了一个简单的MFC创建线程的例子,新建一个MFC应用程序,基于对话框的 分别添加三个按钮和三个静态文本,然后在Button1里直接处理,不新建线程,做法是双击Button1按钮, 这里是每隔1000毫秒就循环一次,因为是主线程在工作,所以这时其他任何操作都不会起作用,发生了主线程阻塞 然后双击Button2, 用函数AfxBeginThread新建线程,第一个参数是创建线程原创 2016-12-31 21:40:50 · 1612 阅读 · 0 评论 -
MFC线程控制
线程启动后可以暂停(有的人喜欢叫挂起),继续,终止,这里就以上次做的MFC创建线程的小例子做些修改,将Button2标题改为启动,再添加几个按钮,如图 启动按钮(之前的Button2)的处理也做些修改 这里g_pThreadA和g_bRunningA都是全局变量一个是线程指针,一个是BOOL变量,确定线程是否结束。 如果要暂停线程,必须线程已启动,所以处理暂停按钮时,判断g_pThread原创 2017-01-01 11:14:16 · 624 阅读 · 0 评论 -
MFC线程同步
MFC线程同步 *为什么要进行线程同步? 线程是非常好的程序设计方法,线程可以简化程序设计,而且线程也极大的改善了程序性能,但是 ,使用线程要小心,比如多个线程同时使用了共享资源,如果多个线程同时修改了共享资源,那么 最后的结果很可能是错的,要保证共享资源不被多个资源同时修改,就要把多个线程进行同步,同步就是禁止多个线程对共享资源同时进行修改,一次只允许一个原创 2017-01-01 11:31:22 · 1213 阅读 · 0 评论 -
线程同步方法
线程同步方法 临界区 -> CCriticalSection //Critical 鉴定的;临界的;批评的;爱挑剔的; 临界区对象是应用程序对象,以下三个都是Windows的内核对象,所以使用临 界区对象相对来说要快点 互斥量 -> CMutex //mutex 互斥,互斥量 信号量 -> CSemaphore //Semaphore 信号量 事件 ->原创 2017-01-01 17:12:07 · 383 阅读 · 0 评论 -
环境变量
Windows里有很多环境变量,这些环境变量以’\0’隔 开,环境变量名和值都是字符串,所有的环境变 量都以”变量名1=变量值1’\0’变量名2=变量值2…”这种形式存放于字符数组中 *GetEnvironmentStrings //读取所有环境变量 *GetEnvironmentVariable //读取单个环境变量 *SetEnvironmentVariable //修改环境变量原创 2017-01-22 21:06:59 · 297 阅读 · 0 评论 -
模拟时钟
# include<windows.h># include<cmath># define ID_TIMER 1# define TWOPI (2*3.14159)LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInsta原创 2017-03-08 14:46:56 · 1774 阅读 · 0 评论 -
win32数字时钟
首先看下程序吧 一个数字时钟,如何实现呢? 首先,这样的数字可以分为7个部分 111111 2 3 2 3 444444 5 6 5 6 777777 这样,可以定义一个二维数组原创 2017-03-05 17:55:03 · 1706 阅读 · 0 评论 -
Colors1程序
了解即可,不细细研究了# include<windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);LRESULT CALLBACK ScrollProc(HWND, UINT, WPARAM, LPARAM);//拥有输入焦点的滚动条的IDint idFocus;/*可以查看一下定义:ypedef LRESULT (CAL原创 2017-03-10 15:37:38 · 455 阅读 · 0 评论 -
列表框
下面是一个将环境变量放在列表框中,点击其中某个条目时,就会在一个静态文本中显示该环境变量的值,如图: 环境变量吧,可以通过GetEnvironmentString函数获取,不过需要注意,windows的环境变量是存放在一个字符数组中,该函数返回指向该数组的第一个字符的指针 而且数组开头有一个特殊标志,会看到是这样的:"=::=::\\"每个环境变量都是以”变量名=变量值”存放,所以数组中原创 2017-03-12 11:06:52 · 207 阅读 · 0 评论 -
非模态对话框
对话框分为模态的和非模态的,常见的是模态对话框,通常可以在资源文件中新建一个对话框,然后再WinMain函数中调用DialogBox来显示对话框,当模态对话框未关闭时,不可以对主窗口进行操作,必须将其关闭才可以,非模态对话框则不必,非模态对话框一般用CreateDialog创建,windows程序设计第五版中有一个HexCalc小程序,它不是在资源文件中新建对话框模板的,而是用一种新的方式,之前没用原创 2017-03-22 17:09:06 · 770 阅读 · 0 评论 -
DrawText格式化文本的一些格式
DrawText输出文本不像TextOut(在指定坐标处输出文本),而是在某个矩形内输出文本int DrawText(HDC hDC, // 设备描述表句柄LPCTSTR lpString, // 将要绘制的字符串int nCount, // 字符串的长度(-1表示lpString是以'\0'结尾的,自动计算字符串字符个数)LPRECT lpRect, // 指向矩形结构RECT的指针U原创 2017-03-13 19:29:54 · 5763 阅读 · 0 评论 -
如何以椭圆形显示位图
windows程序设计第14章的一个程序,下面是对该程序的分析:位图显示的话一般都是矩形,比如之前写的一篇关于显示位图的博文显示位图 那么如果我们想椭圆显示呢?如图: 哦,可以这样,将选好的图片复制到画图程序中,用白色的画笔”擦除”椭圆外的部分,然后设置客户区颜色为白色,再在客户区显示位图,如果将客户区颜色改变呢?显然这样做是不行的,为此,有一种非常通用的技术原创 2017-04-13 19:52:43 · 1275 阅读 · 0 评论 -
显示设备相关位图(ddb: device dependent bitmap)
如何在窗口显示一张位图呢?可以用BitBlt函数(bit block transfer 位块传送),基本按照这几步就可以了 第一步:加载位图,获得位图句柄 第二步:从位图句柄获取位图信息,比如宽度,高度等 第三步:创建兼容DC 第四步:将位图选进DC然后就可以使用BitBlt函数显示位图了BitmapDemo.cpp# include<windows.h># include"resourc原创 2017-04-13 10:38:19 · 1458 阅读 · 0 评论 -
SetDIBitsToDevice函数
View ColorizedCopy to Clipboardint SetDIBitsToDevice( HDC hdc, int XDest, int YDest, DWORD dwWidth, DWORD dwHeight, int XSrc, int YSrc, UINT uStartScan, UINT cScanLines, CONST VOI原创 2017-04-23 19:54:58 · 6047 阅读 · 3 评论 -
GDI映射方式
在win32中,比如使用TextOut函数:BOOL TextOut(HDC hdc, // 设备描述表句柄int nXStart, // 字符串的开始位置 x坐标int nYStart, // 字符串的开始位置 y坐标LPCTSTR lpString, // 字符串int cbString // 字符串中字符的个数); 这里的x,y坐标是什么单位呢?原点在哪?哪个方向为正?原创 2017-03-08 13:34:29 · 894 阅读 · 0 评论 -
进程和线程
进程和线程: *程序-运行-线程 //一个程序,在运行之前是硬盘上的一个文件,开始运行之后,就是一个进程 *一个进程至少有一个线程,一个进程可以有多个线程(其中有一个主线程) *简单的程序设计,一个进程一个线程 *高级的程序设计,一个进程多个线程 *任务管理器可以查看进程,不可以查看线程 spy++既可以查看进程原创 2016-12-27 10:31:59 · 208 阅读 · 0 评论 -
创建进程
创建进程原创 2017-01-02 19:38:47 · 338 阅读 · 0 评论 -
编写服务程序
编写服务程序会用到这些函数: *服务主函数 ServiceMain() StartServiceCtrlDispatcher() //dispatcher n. 调度员;[计] 调度程序;[计] 分配器*服务控制处理函数 ServiceCtrlHandle() RegisterServiceCtrlHandle()首先创建一个win原创 2016-12-21 10:37:10 · 365 阅读 · 0 评论 -
win32两种填充模式ALTERNATE和WINDING的区别
刚学到windows程序设计的填充模式时,对于ALTERNATE和WINDING这两种模式还是 有点晕乎乎的,看了下msdnWhen the fill mode is ALTERNATE, GDI fills the area between odd-numbered and even-numbered polygon sides on each scan line. That is, GDI f原创 2016-07-05 11:19:53 · 2278 阅读 · 2 评论 -
Bezier样条
本来以为暑假好好学习Windows程序设计第五版的,结果因为一些事耽误了,回到学校后,转专业后右到补修什么的,尽量抽时间来专攻吧,废话不说,开始吧这就是贝塞尔(Bezier)样条,加上两条直线有助于理解,windows中有画Bezier样条的函数,就是PolyBezier; 不知道函数怎么用,可以查阅微软的官方帮助文档msdn,下面是msdn的解释 BOOL PolyBezier( HD原创 2016-09-03 11:23:33 · 726 阅读 · 0 评论 -
使用自己的图标
想了想,还是记下吧,省的下次忘了又得找来找去。一般的话都是使用微软提供的图标,比如IDI_APPLICATION,IDI_ASTERISK等,使用: wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); 就可以了,但是我们要是使用一张图片制作的图标该怎么办呢? 首先,选择一张自己想作为图标的图片,我就用这张吧,原创 2016-11-06 21:12:43 · 486 阅读 · 0 评论 -
windows程序设计笔记
WINAPI标识符在WINDEF.H中定义:define WINAPI __stdcall该语句制订了一个调用约定,包括如何生成机器代码以及在堆栈中放置函数调用的参数, 1:1)在Win32API中,长指针和短(近)指针是没有区别的,这只是16为Windows的遗物2):wndclass.lpfnWndProc=WndProc; 这条语句将这个窗口类类的窗口过程设置为WndProc,这个原创 2016-09-08 16:29:35 · 3231 阅读 · 0 评论 -
windwos程序设计里的clock程序,第八章
windows程序设计第五版这本书,不得不说,收获颇多,但越到后面也就越来越难,有时都觉得是不是自己太笨了,这个clock程序看了好久,终于弄懂了,先看一下程序运行的结果吧 代码里都有注释,就不多说了# include<windows.h># include<cmath># define ID_TIMER 1# define TWOPI (2*3.14159)LRESULT CALLBAC原创 2016-10-20 10:21:36 · 419 阅读 · 0 评论 -
遍历磁盘中的卷(方法一)
右击”我的电脑”-“管理”-“磁盘管理”,会看到计算机中的卷, 那么如何调用api查看呢? 可以调用GetLogicalDriveStrings函数,函数原型为: DWORD GetLogicalDriveStrings( DWORD nBufferLength, LPTSTR lpBuffer );代码如下:# include<windows.h># include<st原创 2016-11-29 07:17:45 · 452 阅读 · 0 评论 -
遍历磁盘中的卷(方法二)
还有一种方法可以遍历卷,通过调用FindFirstVolume和FindNextVolume, 函数原型:HANDLE FindFirstVolume( LPTSTR lpszVolumeName, DWORD cchBufferLength );BOOL FindNextVolume( HANDLE hFindVolume, LPTSTR lpszVolumeName,原创 2016-11-29 07:32:36 · 572 阅读 · 0 评论 -
驱动器属性
# include<stdio.h># include<windows.h># include<stdlib.h>/* 要获取一些关于驱动器的属性,可以调用这些函数: 1: UINT GetDriveType( LPCTSTR lpRootPathName ); 函数有一个参数,比如"c:\\"(\是转义字符,所以要两个\,比如”\"“就是表示“)原创 2016-11-29 08:51:02 · 370 阅读 · 0 评论 -
写自己的命令
哈哈,发现可以在Windows下可以写自己命令了 之前编写c程序时,在windows下一直都是编译,运行通过开发工具进行的,其实还可以通过命令的方式运行程序,而且还可以传入argv[]参数, 首先,编写代码# include<windows.h># include<stdio.h>int main(int argc,PTCHAR argv[]){ /*printf("个数:%d\n"原创 2016-11-29 22:39:30 · 298 阅读 · 0 评论 -
添加普通菜单
首先建立一个win32项目后,点击资源视图,右键项目名-添加-资源,选中Menu,新建 之后就可以添加菜单选项了 这是制作的菜单的效果 添加好资源后,就可以编写代码了,记得包好”resource.h”# include<windows.h># include"resource.h"# define ID_TIMER 1LRESULT CALLBACK WndProc(HWND,原创 2016-11-18 13:00:38 · 494 阅读 · 0 评论 -
获取系统版本
/* 系统信息 *系统版本 GetVersionEx OSVERSIONINFOEX *硬件信息 GetSystemInfo SYSTEM_INO*/# include<stdio.h># include<windows.h>#pragma warning(disable:4996)void ShowVersionInfo(翻译 2016-12-01 14:43:20 · 454 阅读 · 0 评论 -
一个简单的DLL
最近在You Tube上学习一些API的使用,很有收获,dll没接触过,就写博客记录下来,方便自己复习,巩固知识dll就是动态链接库(dynamic link library),下面就以做一个简单的dll为例:一个简单的DLL //创建win32项目,勾选dll,空项目 *导出函数声明 extern "C" _declspec (dllexport) *三个重要文件 xxx.h原创 2016-12-11 17:50:01 · 1356 阅读 · 0 评论 -
注册表操作
VDD注册表(VDD Virtual Device Driver) *注册表内部结构 key->subkey->value->名称、类型、数据 *注册表编程函数 RegCreateKey RegCreateKeyEx RegOpenKey RegOpenKeyEx RegQueryValue RegQuery翻译 2016-12-02 13:45:42 · 415 阅读 · 0 评论 -
运行时加载DLL
使用DLL有两种方法,一种是启动时加载DLL,另一种就是运行时加载DLL,之前的一篇博文用的就是启动时加载DLL,现在来看看运行时是如何加载DLL的还是之前的那个项目,只不过添加了两个函数(W版本的和A版本的) 这是源文件.cpp# include<Windows.h># include"标头.h"//Dll入口函数就是DllMain,DllMain既是入口点,也是出口点int WINAP原创 2016-12-12 22:07:16 · 1768 阅读 · 0 评论 -
图像处理:Robert边缘检测算子
事情比较多比较杂,早点把学校的事弄完吧,好久没写博客了,最近计算机前沿这门课,老师要布置课题,大部分是Verilog HDL程序设计,脑壳疼,硬件太烦,不过还好,可以选择其他方向的哈哈,api学习还是有必要的,不必造轮子,不过,要有造轮子的能力,具体分的课题是边缘检测算法的Robert算子书上只是给个函数,可以理解为伪代码,具体实现,还是要自己去动手的,书上只是给个思路而已:核心就是...原创 2018-11-26 14:49:30 · 6596 阅读 · 8 评论