孙鑫vc++ 第一课 笔记

本文介绍了Windows编程的基本概念,包括操作系统如何为应用程序建立消息队列、窗口的创建过程,并详细讲解了一个简单的Windows程序示例代码。
今天开始决定好好复习了,为了能更深入更扎实掌握这一门编程技术,下了孙鑫的视频教程,感觉确实不错,说得很明白,让我有想做笔记的冲动,和大家一起分享了,但我只记我感兴趣的部分,呵呵

1、操作系统会为每个应用程序建立一个消息队列。
      我以前以为windows只有一个消息队列,尽管我知道那样的话会很庞大。

2、窗口的建立过程:
      1 设计窗口类
      2 注册窗口
      3 建立窗口
      4 显示窗口

3、 GetDC(hwnd);   ReleaseDC(hwnd,hdc);      成对出现,不能用于wm_paint

4、 BeginPaint(hwnd,&ps);    EndPaint(hwnd,&ps);   成对出现,只能用于wm_paint
 
5、windows 程序基本架构

#include <windows.h>    //windows 程序头文件
#include <stdio.h>     //基本头文件

LRESULT CALLBACK WinSunProc(          //回调函数声明
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance       
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // 命令行参数
  int nCmdShow              // 程序显示方式
)
{
    WNDCLASS wndcls;                //设计窗口
    wndcls.cbClsExtra=0;
    wndcls.cbWndExtra=0;
    wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);     //获取画刷布置背景
    wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
    wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
    wndcls.hInstance=hInstance;                        //程序实例句柄,直接用参数
    wndcls.lpfnWndProc=WinSunProc;             //指定回调函数,操作系统会完成调用过程
    wndcls.lpszClassName="Weixin2003";
    wndcls.lpszMenuName=NULL;
    wndcls.style=CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&wndcls);        //注册窗口

    HWND hwnd;
    hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,
        0,0,600,400,NULL,NULL,hInstance,NULL);   //建立窗口。设计类名,窗口标题,窗口类型

    ShowWindow(hwnd,SW_SHOWNORMAL);              //显示窗口。窗口句柄,显示方式
    UpdateWindow(hwnd);

    MSG msg;
    while(GetMessage(&msg,NULL,0,0))           //获取消息,wm_quit返回0,否则返回非0
    {                                 //载入消息,哪个窗口(null为全部),消息过滤范围
        TranslateMessage(&msg);    //解析消息
        DispatchMessage(&msg);     //分派消息入回调函数
    }
    return 0;
}

LRESULT CALLBACK WinSunProc(   //显式声明函数方式为_stdcall调用约定,参数调用顺序,堆栈操作不同
  HWND hwnd,      // handle to window                 //vc api都是_stdcall,c++默认_cdecl方式
  UINT uMsg,      // message identifier                                //这些参数和消息结构前四个一致,处理消息
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
    switch(uMsg)
    {
    case WM_CHAR:                              //要始终显示,可以在该消息中处理
        char szChar[20];
        sprintf(szChar,"char is %d",wParam);         //格式化字符串并输入制定内存
        MessageBox(hwnd,szChar,"weixin",0);      //窗口句柄,字符串,窗口标题,显示方式(ok/yesno类型等)
        break;
    case WM_LBUTTONDOWN:
        MessageBox(hwnd,"mouse clicked","weixin",0);
        HDC hdc;
        hdc=GetDC(hwnd);               //获取主窗口画布
        TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));  //画布句柄,坐标,字串,字串长
        ReleaseDC(hwnd,hdc);       //销毁dc
        break;
    case WM_PAINT:
        HDC hDC;
        PAINTSTRUCT ps;
        hDC=BeginPaint(hwnd,&ps);         //ps由系统填充和维护,不需要关心
        TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
        EndPaint(hwnd,&ps);
        break;
    case WM_CLOSE:
        if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
        {
            DestroyWindow(hwnd);    //销毁窗口
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);     //销毁程序实例
        break;
    default:
        return DefWindowProc(hwnd,uMsg,wParam,lParam);     //默认回调函数,否则窗口一闪就过
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值