zoukankan      html  css  js  c++  java
  • Windows编程学习笔记(一)

    Windows 编程学习笔记

    学习C++也有一段时间了,一直想学习Windows编程,可是每次都被些无聊的事情耽误了,还有就是自己的毅力太不坚定了,好几次学到一半就荒废了,结果到现在,WIN编程、MFCLinuxPython全部处于一知半解的阶段,这个样到研究生还不得让人笑死…..现在正好是寒假,也是考研之前的最后一个寒假了,时间还算比较充裕,所以要下定狠心把windows编程系统的学习以下。学习资料主要就是windows的入门级书:大名鼎鼎的《Windows programming》,大而全,很适合初学,有要的朋友可以给我发邮件,我这有中文翻译的。这里有些东西是总结的,有些东西的拷贝的。下面就开始了!


    第一章    窗口和消息

       第一个程序毫无疑问是编程界的当家花旦 hello world!了,我用的是vs2005+vi,可能和书上的代码有冲突,但都是些小问题。

    有几个重要的windows函数:

    LoadIcon 加载图标供程序使用。
    LoadCursor 加载鼠标光标供程序使用。
    GetStockObject 取得一个图形对象(在这个例子中,是取得绘制窗口背景的画刷对象)。
    RegisterClass 为程序窗口注册窗口类别。
    ShowWindow 在屏幕上显示窗口。
    UpdateWindow 指示窗口自我更新。
    GetMessage 从消息队列中取得消息。
    TranslateMessage 转译某些键盘消息。
    DispatchMessage 将消息发送给窗口消息处理程序。

    GetClientRect 取得窗口显示区域的大小

    PostQuitMessage 在消息队列中插入一个「退出程序」消息。
    DefWindowProc 执行内定的消息处理

    windows中又有了新的概念:句柄。暂时个人的理解是一个句柄能在程序中代表一个对象。有点像C语言的指针一样,能标志一个对象的存在。

    Windows的命名机制要记牢,因为这时windows的最基础、最常用的功能:

    CS 窗口类别样式

    CW建立窗口

    DT绘制文字

    IDI图示ID

    IDC游标ID

    MB消息框

    SND声音  

    WM窗口消息

    WS窗口样式

    /******************************************/

    每个windos程序都会维护一个消息循环队列:

    while (GetMessage (&msg, NULL, 0, 0))       

    {     

        TranslateMessage (&msg) ;    

        DispatchMessage (&msg)       

    }

    WM_PAINT消息:

    WM_PAINT的处理几乎总是从一个BeginPaint呼叫开始:

    hdc = BeginPaint (hwnd, &ps) ;      

    而以一个EndPaint呼叫结束:

    EndPaint (hwnd, &ps) ;

    WM_DESTROY消息:

    用下面的函数来响应销毁消息

    PostQuitMessage (0) ;
     
    /**************************************************/
    队列化消息与非队列化消息

    Windows处理消息的方式有两种:

    1. 队列化消息,就是上面说得程序的消息队列,比如WM_PAINT,WM_DESTORY,WM_SIZE,等消息都是由他处理的。

    2. 非队列化消息,就是windows能随时处理的消息,也就是对应的消息处理程序,比如一个About窗口AboutProc(HWND,UINT,WPARAM,LPARAMA),这些消息处理函数都用CALLBACK标识符加以表示,

    第一章总结:主要介绍了windows程序的主要处理过程以及几个函数,感觉和Qt相比,Qt的信号/槽机制要比Windows的消息处理机制更加灵活,可以一个Qt的信号和槽是多对多的关系,如果用Windows来实现相同的功能,可能会麻烦很多,当然这不是绝对的,windows消息机制也有很多令人满意称赞的好处,功能的强大。

  • 相关阅读:
    spring3创建RESTFul Web Service
    安装Maven
    如何使用 JSP JSTL 显示/制作树(tree) 菜单
    Eclipse EE导入maven工程
    安装PL/SQL Developer,链接本地64位Oracle
    Maven项目消除奇怪的红叉
    如何禁用Eclipse的Validating
    帮助文档总览
    MySQL下载安装、配置与使用(win7x64)
    C#知识点总结:Monitor和Lock以及区别
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1662796.html
Copyright © 2011-2022 走看看