【windows编程学习笔记】
文章平均质量分 66
zwb8848happy
酷得惊动了党
展开
-
windows API定义
API API(Application Programming Interface)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。其实早在 DOS 时代就有 API 的概念,只不过那个时候的 API 是以中断调用的形式(INT 21h)提供的,在 DOS 下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比原创 2012-01-05 21:43:14 · 555 阅读 · 0 评论 -
WINAPI总结
问:WinMain()前面的WINAPI是什么意思?答:使用windows系统函数。zz两片文章 函数调用的几个概念:_stdcall,_cdecl.... 左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。 _stdcall是Pas原创 2012-03-30 13:34:40 · 1112 阅读 · 0 评论 -
SETROP2
《Windows程序设计》这本书的作者经常会使用一些相当巧妙但是令人费解的语句。在这个程序中,当我把WM_MOUSEMOVE中的Draw()函数去除了一个时发现画方块的过程中痕迹没有被清除,又百度了一遍才明白,作者用SetROP2(hdc,R2_NOT)实现了一个擦除功能。/* * 这个程序是根据第七章BLOCKOUT1.C与BLOCKOUT2.C演化而来的,书上的 * 程序过转载 2012-04-03 10:53:23 · 1326 阅读 · 0 评论 -
鼠标滚动
《windows程序设计》上第255页是一个关于鼠标滚轮的消息。代码如下:#include #include "SYSMETS.h"LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE原创 2012-04-04 09:49:44 · 644 阅读 · 0 评论 -
父子窗口焦点问题
以下权当学习笔记一篇,初学Win32编程的一个小坎,:父子窗口的输入焦点问题,子窗口无法自动获得输入焦点?程序窗口的输入焦点用于表示哪个窗口有资格接收键盘输入消息。带有输入焦点的窗口或是一个活动窗口,或者是该活动窗口的子窗口。当一个顶层窗口获得输入焦点时,Windows向该窗口发送WM_SETFOCUS消息,此窗口可将输入焦点重定位到它的子窗口上。子窗口不会自动获得输入焦点转载 2012-04-04 17:55:17 · 10804 阅读 · 4 评论 -
MDIDemo程序分析
//没有文档窗口时,程序显示MdiMenuInit菜单,仅让创建新文档或是退出文档#include #include "resource.h"//指定Window子菜单在三个菜单模板中的位置,以此告诉客户窗口在哪儿放置文档列表#define INIT_MENU_POS 0#define HELLO_MENU_POS 2#define RECT_MENU_POS 1//给将要出现原创 2012-07-19 08:41:52 · 1196 阅读 · 0 评论 -
Windows编程感悟
1、所有能获取外部指令(消息),并且按照这些指令的指示来工作的对象大多数都是窗口。 2、消息:数字表示,各个消息在各个进程所管辖的不同窗口间流动,触发相应的代码去处理。 3、不同的窗口可能属于不同的进程,对于用户级的进程,互相之间是被隔离的,互相调用对方的代码,为常规方式所不许。所以只能给对方一个信号,有窗口本身来决定如何处理。同样,窗口对象也不能用内存对象的指针来管理,故用句柄。原创 2012-08-04 10:36:43 · 565 阅读 · 0 评论 -
VS 2005 创建DLL工程,并进行调用与调试例子
VS 2005 创建DLL工程,并进行调用与调试例子 1 例子目标在Window下,学会使用Visual Studio 2005创建简单的DLL工程,以及对DLL提供的接口进行调用与调试。 2 DLL工程2.1 创建工程打开VS2005,并创建工程。如图所示。 这里选择“Win32 控制台应用程序”即可。选择工程的位置,以及添加工程的原创 2012-08-05 10:00:32 · 8523 阅读 · 1 评论 -
窗口重绘相关
1、窗口过程可以通过调用InvalidateRect函数来强制是客户区的一个矩形失效。 2、从GetDC返回的设备环境句柄中的裁剪矩形是整个客户区,这意味着你可以再客户区的任意部分绘制,而不仅仅在无效矩形里,也就是说如果不存在无效矩形也没有关系。 3、与BeginPaint不同,GetDCr不会将无效区域有效化,如果需要将整个客户区有效化,可调用函数ValidateRect(hwn原创 2012-08-04 10:34:49 · 488 阅读 · 0 评论 -
UNICODE 汉字字符串
先是网上找的关于UNICODE的一些总结,写的蛮好的:UNICODE环境设置 在安装Visual Studio时,在选择VC++时需要加入unicode选项,保证相关的库文件可以拷贝到system32下。 UNICODE编译设置: C/C++, Preprocessor difinitions 去除_MBCS,加_UNICODE,UNICODE 在ProjectSettin原创 2012-08-20 22:31:13 · 1857 阅读 · 0 评论 -
C#中如何判断一个字符是汉字
判断一个字符是不是汉字通常有三种方法,第一种用 ASCII 码判断,第二种用汉字的 UNICODE 编码范围判 断,第三种用正则表达式判断,以下是具体方法。 1、用ASCII码判断 在 ASCII码表中,英文的范围是0-127,而汉字则是大于127,具体代码如下:[csharp] view plaincopyprint?string转载 2012-08-20 21:43:57 · 811 阅读 · 0 评论 -
sizeof()和lstrlen()和strlen()区别
strlen()是返回字符串的字节长度, lstrlen()是返回字符串的字符长度。 也就是说第二个函数可能和第一个函数结果一样,如果字符串中字符单位都是单字节的话。 一般来说主要区别在于ascii的字符,还是unicode或者是utf的区别。ASCII编码是一个字符占一个字节,Unicode是一个字符占两个字节.求这两种字符串的长度,要用两个函数分别来.转载 2012-08-20 21:46:45 · 1333 阅读 · 0 评论 -
使用HANDLE_MSG宏简化Win32应用的开发
Win32应用中的回调函数WndProc用于接收Windows向应用程序直接发送的消息,以及响应消息。大多情况下,我们这样编写代码:[cpp] view plaincopyLRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPAR转载 2012-09-13 21:18:24 · 709 阅读 · 0 评论 -
mciSendString的使用
函数介绍:The mciSendString function sends a command string to an MCI device. The device that the command is sent to is specified in the command string. MCIERROR mciSendString( LPCTSTR lpszCommand,原创 2012-09-15 10:01:12 · 4758 阅读 · 0 评论 -
CALLBACK总结
CALLBACK函数在微软的官方手册中是这样定义CALLBACK函数的:“CALLBACK函数是由应用程序 定义而由操作系统调用的函数”。 凡是由用户设计而却由Windows系统调用的函数,统称为Callback函数,这些函数都有一定的类型,以配合Windows的调用操作。 某些API函数以Callback作为其参数之一,这些API,如SetTimer、LineDDA、原创 2012-03-30 13:27:39 · 654 阅读 · 0 评论 -
GetWindowLong函数(最好的解释资料,绝对值得一看,此函数在子类化技巧时候经常用到)
今天在看一个代码里头写了GetWindowLong (hwnd, 0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第2个参数为0是指什么,MD,很恼火,最近终于在一个国外网站找到,我在这篇文章贴了,网站是http://www.codeguru.com/forum/archive/index.php/t-243778.html先收集所有关于此函数的使用方法以及程序代码转载 2012-03-30 13:10:34 · 2276 阅读 · 0 评论 -
一、起步
相信大家对Hello World都很熟悉,c语言输出它的程序是这样:#include int main(){ printf("Hello World!\n"); return 0;}我们编写的window程序 ,怎样输出它呢?和字符模式版本的程序一样,windows对应的“Hello World”程序包括了同样的组成部分,即include语句、程序入口、原创 2012-02-24 22:09:14 · 424 阅读 · 0 评论 -
二、Unicode简介(1)
简单来说,unicode用的是16位字符编码,而不是像ASCII那样7位代表一个字符,也不是计算机上常见的每个字符8位的方式。一、宽字符和c语言ASCII中字符类型举例:char c='A'; char * p="Hello"; char a[]="Hello";Unicode中字符定义:c语言中宽字符是基于wchar_t数据类型的(原创 2012-02-27 20:30:43 · 508 阅读 · 0 评论 -
二、Unicode简介(2)
一、在windows中使用printf因为windows中不存在标准输入和标准输出,所以你可以在windows程序中使用fprintf函数,但不能使用printf函数。但是你仍然可以使用sprintf和sprintf系列的其他函数来显示文本。sprintf函数定义如下:int sprintf (char *szBuffer,const char *szFormat,...)原创 2012-02-27 20:48:21 · 689 阅读 · 0 评论 -
Messagebox函数
这是MessageBox函数的声明:int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);参数一hWnd是一个HWND,它是这个MessageBox属于的窗口的HWND,如果它为NULL,则MessageBox不属于任何一个窗口。参原创 2012-03-02 21:50:49 · 881 阅读 · 0 评论 -
关于Invalidate、InvalidateRect和UpdateWindow
关于Invalidate、InvalidateRect和UpdateWindow(1)Invalidate Invalidate标记一个需要重绘的无效区域,并不意味着调用该函数后就立刻进行重绘。类似于PostMessage(WM_PAINT),需要处理到WM_PAINT消息时才真正重绘。因为您Invalidate之后还有其他的语句正在执行,程序没有机会去处理WM_PAI原创 2012-03-23 22:15:02 · 602 阅读 · 0 评论 -
BeginPaint和GetDC
刚学windows程序设计,在编写一个程序时,发现一个问题:所有的绘图消息都在WM_PAINT中处理吗?如果我有很多不同的绘图任务,例如,A想画个矩形,B想画个圆,C想输出一段话,D想。。。我觉得这些不同的绘图如果都放在WM_PAINT中处理,那不是一处理WM_PAINT消息就全都画出来了吗?在csdn上提问后,一位大神给了我答案:可以用函数自绘。于是我写了代码:原创 2012-03-24 13:04:15 · 478 阅读 · 0 评论 -
windows编程-格式化输出
大家还记得用c语言中printf函数进行格式化输出吧!可惜的是windows中并没有这种函数,因为windows不存在标准输入和标准输出的概念。但是我们可以用sprintf和sprintf系列的其他函数来显示文本。考虑到Unicode和ASCII的关系,我们使用更健壮的wsprintf函数。下面给个例子:#include int WINAPI Win原创 2012-03-26 15:15:37 · 1012 阅读 · 0 评论 -
为什么不能在WM_CREATE中绘制
问题:case WM_CREATE: TextOut(hdc,10,53,TEXT("OKOK"),4);//这条语句不能打印出结果,即不可见 return 0;case WM_PAINT : hdc=BeginPaint(hwnd,&ps); TextOut(hdc,10,53,TEXT("OKOK"),4);//这条语句可以正确打印结果 EndPaint(hwnd,原创 2012-03-26 21:21:28 · 923 阅读 · 0 评论 -
三、窗口与消息源代码
#include LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){ static TCHAR sz原创 2012-03-09 21:30:18 · 458 阅读 · 0 评论 -
windows滚动条
今天自己写了《windows程序设计》184页的用键盘控制滚动条显示程序,对滚动条显示有点感悟,留个纪念!代码如下:#include #include #include "SYSMETS.h"LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);int WINAPI WinM原创 2012-03-28 17:40:45 · 1302 阅读 · 0 评论 -
InvalidateRect函数
问题:函数中的参数TURE FALSE到底怎么用阿? 清说得具体一点 TURE就是把从前的区域擦掉再重画?答:InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效InvalidateRect函数中的参数TRUE表示系统会在你画之前用背景色将所选区域覆盖一次,默认背景色为白色,可以通过设置BRUSH来改变背景色。Invalidate()之原创 2012-03-29 19:27:14 · 7088 阅读 · 1 评论 -
windows设置字体
CreateFont函数作用:创建一个具有特定特性的逻辑字体,该字体创建后可被用作其他设备。函数原型:HFONT CreateFont(int nHeight, :字体高度. 三种情况 1、>0:字体的高度值(设备坐标);2、=0:字体采用缺省值. 3、int nWidth, :字体宽度.int nEscapement, :文本行的倾斜度.原创 2012-03-28 20:26:04 · 1068 阅读 · 0 评论 -
SetWindowLong函数总结
在网上搜了一下这个函数的用法,在此汇总一下!注册窗口类时可以指定“每窗口额外内存” 这段内存可以通过Get(Set)WindowLong 来访问 SetWindowLong 的 nIndex 参数如果不小于0 那么就是访问这段内存, 这段内存存放什么东西都可以 如果 nIndex 小于零 那就是访问窗口的数据结构 其实这是另外一个原创 2012-03-30 13:08:30 · 21316 阅读 · 0 评论 -
C语言读取mp3文件的信息
MP3文件的ID3V1信息与ID3V2信息结构的分析 ——吴俊涛2005/05/05 E-mail:bo_tao@126.com QQ:29248671 主 页:http://wjt276.home4u.china.com(有源代码) 本人是一位编程爱好者,想通过VB。NET编写一个可以读取MP3文件的信息的不程序,可以不知道文件结构,呀我在网上找了好长时间(好转载 2012-09-24 10:54:47 · 12003 阅读 · 1 评论