VC++第一章学习笔记

2006-11-09 20:42:11
 
       C语言入门以后,感觉现在用C语言编DOS程序实用价值很低,应该编一些有实用价值windows平台的程序来增加一下我学习编程的兴趣。于是今天把孙鑫老师的VC++视频教程下载下来,准备学习下VC++。看完了第一章,感觉没有想象中那么难,只是在C语言基础上运用WINDOWS API函数按照一定的流程编写就行了,于是我试着编写了我windows平台下的第一个程序,原来windows平台下编程这么简单,几个函数就出来一个窗口,真是没有想到。

                 VC++第一章
        windows程序运行原理与编写流程学习笔记

#include <windows.h>   //  窗口应用程序头文件
#include <stdio.h>     //  DOS应用程序头文件
LRESULT CALLBACK WinSunProc(   //  窗口过程函数
  HWND hwnd,             //  窗口句柄
        UINT uMsg,              //  消息接收函数
  WPARAM wParam,         //  消息附加参数
  LPARAM lParam          //  消息附加参数2
  );
int WINAPI WinMain(            //  windows程序入口函数
    HINSTANCE hInstance,       //  实例号
    HINSTANCE hPrevInstance,   //  此参数在win32系统中总是为空
    LPSTR lpCmdLine,           //  命令行参数
    int nCmdShow               //  显示状态,比如最大化,最小化
    )
{
 WNDCLASS wndcls;          //  定义窗口类变量
 wndcls.cbClsExtra=0;      //  给类分配一个附加内存,通常为0
 wndcls.cbWndExtra=0;      //  给窗口分配一个附加内存,通常为0
 wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);   //  设置窗口背景,GetStockObject()函数可以获取一个笔,画刷,字体,调色板的句柄,(HBRUSH)为强制转化
 wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);  //  设置光标
 wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);      //  设置图标
 wndcls.hInstance=hInstance;                 //  选择实例
 wndcls.lpfnWndProc=WinSunProc;      //  指定窗口过程函数
 wndcls.lpszClassName="win32";       //  窗口类型名字
 wndcls.lpszMenuName="Null";         //  窗口菜单名字
 wndcls.style=CS_HREDRAW | CS_VREDRAW; //  选择窗口类型  CS_HREDRAW(水平重画) CS_VREDRAW(垂直重画)
 RegisterClass(&wndcls);             //  注册窗口类
 HWND hwnd;                     //  定义窗口句柄
 hwnd=CreateWindow("win32","我第一个窗口程序",WS_OVERLAPPEDWINDOW,200,200,800,600,NULL,NULL,hInstance,NULL);
// 创建一个窗口
 ShowWindow(hwnd,SW_SHOWNORMAL);     //  显示窗口
 UpdateWindow(hwnd);                 //  更新窗口
 MSG msg;                            //  定义消息变量
 while(GetMessage(&msg,NULL,0,0))    //  获取消息,如果为真继续循环,如果为假退出循环
    {
  TranslateMessage(&msg);         //  转换消息,生成WM_CHAR消息
  DispatchMessage(&msg);          //  发送消息到过程函数处理
 }
 return 0;
}
LRESULT CALLBACK WinSunProc(
  HWND hwnd,
             UINT uMsg,
  WPARAM wParam,
  LPARAM lParam
)
{
 switch(uMsg)
 {
 case WM_LBUTTONDOWN:               //  左键点击
      MessageBox(hwnd,"你点击了左键","test",MB_OK);
      break;
    case WM_RBUTTONDOWN:               //  右键点击
      MessageBox(hwnd,"你点击了右键","test",MB_OK);
      break;
    case WM_PAINT:                     //  刷新
   HDC hdc;                      //  定义一个设备描述句柄
   PAINTSTRUCT ps;               //  定义一个刷新结构体,用户无需了解
   hdc=BeginPaint(hwnd,&ps);     //  开使刷新
   TextOut(hdc,100,50,"我第一个VC程序窗口,Yeah!成功了!",strlen("我第一个VC程序窗口,Yeah!成功了!"));
   EndPaint(hwnd,&ps);           //  结束刷新
   break;
    case WM_CLOSE:                     //  窗口关闭
   if(IDYES==MessageBox(hwnd,"你真的要退出吗?","test",MB_YESNO))
   {
    DestroyWindow(hwnd);      //  销毁窗口(但程序不销毁)
   }
   break;
 case WM_DESTROY:                   //  如果接到窗口销毁消息
   PostQuitMessage(0);           //  发送一个退出消息
   break;
    default:                           //  其它消息让windows默认处理(必须加)
  return DefWindowProc(hwnd,uMsg,wParam,lParam);
 }
 return 0;                          // 
}
需要注意的几点:
    1、如果一个函数中不想包括哪些功能,用~符号加上不想要的功能参数,进行与运算即可。
    2、==运算符使用时尽量把常量放在左边,这样万一打错符号也可以很快查出错误。
    3、WM_PAINT是刷新重画消息,不在此消息处理过程中的显示文字和图片,窗口刷新后将消失。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值