VC++深入详解第一章代码

  1. #include <windows.h>  
  2. #include <stdio.h>  
  3. #include <tchar.h>  
  4. #include <atlstr.h>  
  5.   
  6.   
  7. LRESULT CALLBACK WinSunProc(  
  8.                             HWND hwnd,      // handle to window           窗口句柄  
  9.                             UINT uMsg,      // message identifier         消息代码  
  10.                             WPARAM wParam,  // first message parameter    消息代码附加参数1  
  11.                             LPARAM lParam   // second message parameter   消息代码附加参数2  
  12.                             );  
  13.   
  14. int WINAPI WinMain(  
  15.                    HINSTANCE hInstance,      // handle to current instance  该程序当前运行的实例的句柄  
  16.                    HINSTANCE hPrevInstance,  // handle to previous instance 当前实例的前一个实例的句柄  
  17.                    LPSTR lpCmdLine,          // command line                一个以空终止的字符串  
  18.                    int nCmdShow              // show state                  指定程序的窗口应该如何显示  
  19.                    )  
  20. {  
  21.     WNDCLASS wndcls;                //设计一个窗口类  
  22.     wndcls.cbClsExtra=0;  
  23.     wndcls.cbWndExtra=0;  
  24.     wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);      //背景画刷句柄  
  25.     wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);     //光标句柄  
  26.     wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);         //图标句柄  
  27.     wndcls.hInstance=hInstance;                    //包含窗口过程的程序的实例句柄  
  28.     wndcls.lpfnWndProc=WinSunProc;                 //函数指针,指向窗口过程函数  
  29.     wndcls.lpszClassName=_T("sunxin2006");             //指定窗口类名字  
  30.     wndcls.lpszMenuName=NULL;                      //指定菜单资源名字  
  31.     wndcls.style=CS_HREDRAW | CS_VREDRAW;          //窗口样式  
  32.   
  33.     RegisterClass(&wndcls);                        //注册窗口类  
  34.   
  35.     HWND hwnd;  
  36.   
  37.     //创建窗口  
  38.     hwnd=CreateWindow(_T("sunxin2006"),_T("http://www.sunxin.org"),WS_OVERLAPPEDWINDOW,  
  39.         0,0,600,400,NULL,NULL,hInstance,NULL);  
  40.   
  41.     //显示窗口  
  42.     ShowWindow(hwnd,SW_SHOWNORMAL);  
  43.   
  44.     //更新窗口  
  45.     UpdateWindow(hwnd);  
  46.   
  47.     MSG msg;  
  48.     while(GetMessage(&msg,NULL,0,0))  
  49.     {  
  50.         TranslateMessage(&msg);  
  51.         DispatchMessage(&msg);  
  52.     }  
  53.     return msg.wParam;  
  54. }  
  55.   
  56. LRESULT CALLBACK WinSunProc(  
  57.                             HWND hwnd,      // handle to window  
  58.                             UINT uMsg,      // message identifier  
  59.                             WPARAM wParam,  // first message parameter  
  60.                             LPARAM lParam   // second message parameter  
  61.                             )  
  62. {  
  63.     ATL::CString data=_T("程序员之家");//原来的乱码是strlen函数在Unicode工程的问题  
  64.     //第一种方法,使用了atl的CString,也可以使用MFC中的CString  
  65.       
  66.     switch(uMsg)  
  67.     {  
  68.     case WM_CHAR:  
  69.         TCHAR szChar[20];  
  70.         //本工程为Unicode工程  
  71.         wsprintf(szChar,_T("char code is %d"),wParam);  
  72.         MessageBox(hwnd,szChar,_T("char"),0);  
  73.         break;  
  74.     case WM_LBUTTONDOWN:  
  75.         MessageBox(hwnd,_T("mouse clicked"),_T("message"),0);  
  76.         HDC hdc;  
  77.         hdc=GetDC(hwnd);  
  78.         TextOut(hdc,0,150,data,data.GetLength());//第一种方法  
  79.         TextOutA(hdc,0,50,"程序员之家",strlen("程序员之家"));//第二种方法使用TextOutA,针对unicode工程  
  80.         //ReleaseDC(hwnd,hdc);  
  81.         break;  
  82.     case WM_PAINT:  
  83.         HDC hDC;  
  84.         PAINTSTRUCT ps;  
  85.         hDC=BeginPaint(hwnd,&ps);      //得到DC  
  86.         TextOut(hDC,0,0,_T("http://www.sunxin.org"),strlen("http://www.sunxin.org"));  
  87.         EndPaint(hwnd,&ps);            //释放  
  88.         break;  
  89.     case WM_CLOSE:  
  90.         if(IDYES==MessageBox(hwnd,_T("是否真的结束?"),_T("message"),MB_YESNO))  
  91.         {  
  92.             DestroyWindow(hwnd);      //销毁窗口  
  93.         }  
  94.         break;  
  95.     case WM_DESTROY:  
  96.         PostQuitMessage(0);           //向应用程序的消息队列投递一条WM_QUIT消息并返回  
  97.         break;  
  98.     default:  
  99.         return DefWindowProc(hwnd,uMsg,wParam,lParam);  
  100.     }  
  101.     return 0;  
  102. }  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值