第3章学习笔记

原创 2006年05月25日 14:32:00
Diyinside Community Academy Course (Beta)

Windows API自学课程(3)--Windows消息队列机制

学习任务:

1,解释Windows消息事件模型;

2,详细书上阅读HELLOWIN.C代码,并且对代码进行解释;

3,详细描述Windows API应用程序执行步骤

4,编写一个具有Windows消息事件的Win32 API应用程序


Learning WIN32 API Homework By citypw(Shawn Chang)
 
学习内容:

阅读<Programming Windows,Fifth Edition> Chapter 3
1,解释Windows消息事件模型;
Windows开发是不同于DOS开发的模型,Windows开发是基于消息事件驱动的设计,当用户需要完成某种功能时,会调用操作系统的API,然后操作系统将用户的需要包装成消息放到消息队列(QUEUE)里,消息队列是一个先进先出(FIFO)的,最后应用程序从消息队列里取走消息并进行响应.

2,详细书上阅读HELLOWIN.C代码,并且对代码进行解释;


3,详细描述Windows API应用程序执行步骤
创建窗口:1,设计一个窗口类 2,注册窗口类 3,创建窗口 4,显示与更新窗口
用户开始做操作,开始消息循环,一直到应用程序关闭.

4,编写一个具有Windows消息事件的Win32 API应用程序
#pragma comment(lib,"WINMM.LIB") //要用多媒体必须的文件
#include <windows.h>

//消息处理函数
//参数:窗口句柄,消息,消息参数,消息参数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    RECT rect;
    PAINTSTRUCT ps;
    //处理感兴趣的消息
    switch (message)
    {
    case WM_CREATE:
        //自己录的
        PlaySound (TEXT ("hello.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
        return 0 ;

    case WM_PAINT:
        //绘制一个"Hello,QUAKE III ARENA"
        hdc = BeginPaint (hwnd, &ps) ;

        GetClientRect (hwnd, &rect) ;

        DrawText (hdc, TEXT("Hello, QUAKE III ARENA"), -1, &rect,
            DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
        EndPaint (hwnd, &ps);
        return 0;
    case WM_KEYDOWN:
        //用户按下键盘上的字母或者数字就会弹出消息
        MessageBox(hwnd,TEXT("Shit"),TEXT("yeah"),NULL);
        return 0 ;

    case WM_DESTROY:
        //当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环
        PostQuitMessage (0) ;
        return 0 ;
    }
    //其他消息交给由系统提供的缺省处理函数
    return ::DefWindowProc (hwnd, message, wParam, lParam) ;
}

//应用程序主函数
//参数:实例句柄、前一个实例的句柄、命令行参数、窗口显示方式
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    //1.注册窗口类
    static TCHAR szAppName[] = TEXT ("HelloWin") ; //窗口类名称

    WNDCLASS wndclass ;                //定制"窗口类"结构
    wndclass.style = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc = WndProc ; //关联消息处理函数
    wndclass.cbClsExtra = 0 ;
    wndclass.cbWndExtra = 0 ;
    wndclass.hInstance = hInstance ; //实例句柄
    wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; //图标
    wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //光标
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); //画刷
    wndclass.lpszMenuName = NULL ;
    wndclass.lpszClassName = szAppName; //类名称
    //注册
    if (!RegisterClass (&wndclass))
    {
        MessageBox (NULL, TEXT ("RegisterClass Fail!"),
            szAppName, MB_ICONERROR) ;
        return 0 ;
    }

    //建立窗口
    HWND hwnd ;
    hwnd = CreateWindow (szAppName, //窗口类名称
        TEXT ("The Hello Program"), //窗口标题
        WS_OVERLAPPEDWINDOW, //窗口风格
        100,        //窗口启动时的X座标
        300,        //窗口启动时的Y座标
        500,        //窗口初始宽度
        300,        //窗口初始高度
        NULL,
        NULL,
        hInstance, //实例句柄
        NULL);




    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;

    //消息循环
    MSG msg ;
    while (GetMessage (&msg, NULL, 0, 0)) //从消息队列中取消息
    {
        TranslateMessage (&msg) ; //转换消息
        DispatchMessage (&msg) ; //分发消息
    }
    return msg.wParam ;
}
                                                         
                                                          id:CityPW
                                                          Shawn Chang
                                                          http://blog.csdn.net/raiden56

参考:Programming Windows和SUNXIN的视频第1章

周志华《机器学习》笔记:第3章 线性模型

本章概括 从最简单但也是最基础的线性模型开始研究。线性模型虽然简单,但却是基础。先研究线性、单属性的线性回归问题,在此基础上研究非线性、多属性的回归和分类问题。 第3章 线性模型 单属性...
  • yzqzoom
  • yzqzoom
  • 2016年07月10日 12:11
  • 3115

tensorflow02 《TensorFlow实战Google深度学习框架》笔记-03

01 运行环境win10 python3.5.3 CUDA v8.0 cudnn-8.0-windows10-x64-v5.1 代码运行工具: A Eclise Neon.2 Release (4...
  • longji
  • longji
  • 2017年04月06日 20:42
  • 2125

《机器学习》周志华第四章笔记

自己对决策树的一些理解,不一定对,权当加深印象。4.1基本流程组成:一个根节点、若干内部节点和若干叶节点;叶节点对应了不同的预测结果,我们的目的是从包含样本全集的根节点找到它到每个叶节点的路径对应一个...
  • sysu_cis
  • sysu_cis
  • 2016年07月01日 21:23
  • 1114

《jQuery权威指南》学习笔记之第3章 jQuery操作DOM

  • 2013年07月02日 16:37
  • 143KB
  • 下载

Unity Shader入门精要学习笔记 - 第3章 Unity Shader 基础

概述 总体来说,在Unity中我们需要配合使用材质和Unity Shader才能达到需要的效果。一个最常见的流程是。 1)创建一个材质 2)创建一个Unity Shader,并把它赋给上一步创建的材质...
  • u010848412
  • u010848412
  • 2017年04月20日 10:07
  • 343

《Python基础教程 第2版·修订版》第3章 使用字符串(学习笔记)

3.1基本字符串操作 基本字符串操作 所有标准序列的操作(索引、分片、乘法、判断成员资格、求长度、取最小值和最大值)对字符串同样适用。唯一不同是字符都是不可变的3.2字符串格式化:精简版 字符...
  • fengzhanghao23
  • fengzhanghao23
  • 2015年10月06日 09:12
  • 663

学习笔记:第3章 数据库基础知识

1、实体是现实世界中可以区别于其他对象的“事物”或“物体” 2、实体的联系分为实体内部的联系和实体与实体之间的联系。 3、属性是实体某方面的特征。 4、概念模型中最常用的...
  • dring321
  • dring321
  • 2014年04月20日 12:16
  • 417

Oracle 9i/10g/11g编程艺术(2e)学习笔记【第3章】

第三章  文件 1、概述:构成数据库和实例的文件类型主要有以下8种。     与实例相关的文件包括:参数文件(parameter file)、跟踪文件(trace file)、警告文件(alert...
  • yehangchuan11
  • yehangchuan11
  • 2013年04月08日 20:05
  • 849

《TCP/IP详解》学习笔记-第3章 IP:网际协议

1、概述IP是TCP/IP协议族中最为核心的协议。所有的TCP,UDP,ICMP,IGMP数据都以IP数据报格式传输。IP提供不可靠,无连接的数据报传送服务。 (1)不可靠:它不能保证IP数据报能成...
  • will130
  • will130
  • 2016年05月11日 16:17
  • 343

《VC++深入详解》学习笔记[2]——第3章MFC框架程序剖析

第3章MFC框架程序剖析 1.基于MFC的程序框架剖析 对于一个单文档应用程序,使用MFC AppWizard将自动生成5个类(假设工程名为Test): ①CAboutDlg←CDialog←C...
  • peace_power
  • peace_power
  • 2011年12月11日 13:54
  • 445
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第3章学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)