Windows编程一日一练(1)

来源:互联网 发布:js防水涂料比例 编辑:程序博客网 时间:2024/05/01 20:53
         首先,编程和旅游是我个人人生两大爱好,所以,每天空闲的时候我喜欢敲敲代码,或者看看别人写的程序,实在是很惬意。今天想看看window编程,争取坚持每日一练。
       windows程序主要是由微软提供的windows API以及c语言来编写API函数都包含在<windows.h>头文件中,当然有的人喜欢用更快捷的方式,MFC之类的,但个人感觉从头开始的还是多看点基础的东西为好。今天主要了解一下windows编程最基础也很重要的知识。
     句柄是windows编程中最常用的术语,它是用来标识各种项目的,如实例(INSTANCE),模块(MODULE),文件(FILE),任务(TASK),内存块(BLOCK OF MEMORY),菜单(MENY)等。句柄与指针并不相同,句柄是一个32位整数,WIN32中用于标记某个系统或进程的对象,可以理解为对象索引,跟内存地址没有必然的联系,从句柄到对象内存地址存在一种映射关系,因此通过句柄可以方便的访问各种对象和资源。指针对应着一个数据或对象在内存中的存储地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄,平时只是在调用API函数时利用这个句柄来说明要操作哪段内存。 
    windows编程主要是操作API函数, API函数是开发Windows应用程序最底层的东西。随着Windows系统的不断升级,与系统相关的API函数也在不断的变化,最明显的变化是有原来的16位变成了32位。有的API函数可以在每个版本的Windows系统中运行,有的则不可以,例如实现窗体半透明效果的SetLayeredWindowsAttributes函数,他只能在Windows2000及以后的系统下运行。在调用API函数时,通常在函数前加::,表示调用全局函数。API函数有很多种,可分为窗口管理,图形设备接口,网络服务,系统服务,国际特性几个部分。API函数都封装在动态链接库中,对API函数的调用都需要加载动态链接库,常用的API函数大都封装在KDRNEL.dll、GDL.dll、USER.dll等几个动态链接库中,但在Microsoft Visual C++中调用API函数并不需要额外加载动态链接库的代码,因为Visual C++会自动与常用的动态链接库相连。
下面是API函数常见的数据类型
   HANDLE是空类型指针,可以指向任何类型的数据;
     WORD即字,表示16位无符号整型;
     DWORD表示32位无符号整型,是WORD的两倍;
     LPTSTR表示一个指针,指向32位的字符串;

     LPCTSTR表示指针,指向32位常量字符串;

    LPRESULT:32位数值,作为窗口函数或CALLBACK函数的返回值

     HINSTANCE:应用程序实例句柄,用来表示进程。HMODULE是代表应用程序载入的模块,win32系统下通常是被载入模块的线性地址,比如exe, dll等模块。一般是指向线程的指针,表示线程的起始地址,是用来识别进程或者线程资源的。获取系统线程:windows提供API函数GetModuleHandle(NULL)来返回系统线程,返回值当然是HMODULE类型。HINSTANCE与HMODULE一样;
    HWND表示窗口句柄,是一个指向窗口内存地址的指针,窗口可以是容器,也可以是各种控件。对于主窗口,通过CreateWindowEx()创建窗口的时候会返回该窗口的HWND。windows还提供API函数专门用来获取窗口句柄,HWND WIN FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName),lpClassName为窗口的类名,lpWindowName为窗口的标题名,二者只需一个便可,另一个可用NULL。
最后附上如何关闭窗口的简单代码,今天的学习就到这了
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
  HWND hwnd;
  hwnd=FindWindow(NULL,"1.txt - 记事本");
  SendMessage(hwnd,WM_CLOSE,0,0);
  system("pause");
        return 0;
}
  
原创粉丝点击