zoukankan      html  css  js  c++  java
  • 第一章 Windows程序内部运行机制(5)动手编写一个Windows程序

    1.新建

    文件->新建->项目,然后进行如图下的设置,名称自定,工程路径随意。

    2.项目设置

    新建好项目之后,需要进行设置,第一个页面之间点击【下一步】,进入下图界面进行设置。

     

    3.建好和设置好项目之后,就建立了一个什么都没有的空项目。头文件源文件和资源文件统统的没有。所以,需要新建一个源文件,用于写代码。

      项目->添加新项。就可以选择要添加的内容,如下图所示,我们现在只是需要添加一个cpp的文件。

    4.写代码

      

     1 #include <windows.h>
     2 #include <stdio.h>
     3 
     4 LRESULT CALLBACK WinSunProc(
     5     HWND hwnd,
     6     UINT uMsg,
     7     WPARAM wParam,
     8     LPARAM lParam
     9     );
    10 
    11 int WINAPI WinMain(
    12     HINSTANCE hInstance,
    13     HINSTANCE hPrevInstance,
    14     LPSTR lpCmdLine,
    15     int nCmdShow)
    16 {
    17     //设计一个窗口类
    18     WNDCLASS wndcls;
    19     wndcls.cbClsExtra = 0;
    20     wndcls.cbWndExtra = 0;
    21     wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    22     wndcls.hCursor = LoadCursor(NULL , IDC_CROSS);
    23     wndcls.hIcon = LoadIcon(NULL , IDI_ERROR);
    24     wndcls.hInstance = hInstance;
    25     wndcls.lpfnWndProc = WinSunProc;
    26     wndcls.lpszClassName = "sunxin2006";
    27     wndcls.lpszMenuName = NULL;
    28     wndcls.style = CS_HREDRAW | CS_VREDRAW;
    29     RegisterClass(&wndcls);
    30 
    31     //创建窗口,定义一个变量来保存成功创建窗口后返回的句柄
    32     HWND hwnd;
    33     hwnd = CreateWindow("sunxin2006", "http://www.sunxin.rog",
    34         WS_OVERLAPPEDWINDOW,0, 0, 600, 400, NULL, NULL, hInstance, NULL);
    35 
    36     //显示及刷新窗口
    37     ShowWindow(hwnd, SW_SHOWNORMAL);
    38     UpdateWindow(hwnd);
    39 
    40     //定义消息结构体,开始消息循环
    41     MSG msg;
    42     while(GetMessage(&msg, NULL, 0, 0))
    43     {
    44         TranslateMessage(&msg);
    45         DispatchMessage(&msg);
    46     }
    47     return msg.wParam;
    48 }
    49 
    50 //编写窗口过程函数
    51 LRESULT CALLBACK WinSunProc(
    52     HWND hwnd,
    53     UINT uMsg,
    54     WPARAM wParam,
    55     LPARAM lParam )
    56 {
    57     switch(uMsg)
    58     {
    59     case WM_CHAR:
    60         char szChar[20];
    61         sprintf(szChar, "char code is %d", wParam);
    62         MessageBox(hwnd,szChar,"char",0);
    63         break;
    64     case WM_LBUTTONDOWN:
    65         MessageBox(hwnd, "mouse clicked", "message", 0);
    66         HDC hdc;
    67         hdc = GetDC(hwnd);
    68         TextOut(hdc, 0, 50, "程序员之家",strlen("程序员之家"));
    69         break;
    70     case WM_PAINT:
    71         HDC hDC;
    72         PAINTSTRUCT ps;
    73         hDC = BeginPaint(hwnd, &ps);
    74         TextOut(hDC, 0, 0, "http://www.sunxin.org",
    75             strlen("http://www.sunxin.org"));
    76         EndPaint(hwnd,&ps);
    77         break;
    78     case WM_CLOSE:
    79         if(IDYES == MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))
    80         {
    81             DestroyWindow(hwnd);
    82         }
    83         break;
    84     case WM_DESTROY:
    85         PostQuitMessage(0);
    86         break;
    87     default:
    88         return DefWindowProc(hwnd,uMsg,wParam,lParam);
    89     }
    90     return 0;
    91 }

    5.调试运行。

      当我们满心欢喜的按下f5的时候,你以为会很成功么?错了,你会遇见下面这些可爱的东东。

      然后不要惊慌不要着急,细心看一下,提示的错误大概都是一个错误,也就是字符串的问题。在vc6中,上述代码是没有问题的,原因是vc6的代码没有按可编译为UNICODE版本的方式写。而VS2005之后版本默认是UNICODE编码的。所以所有使用到字串的地方都会出错。方法:修改VS2005之后版本的设置:选择你的项目->属性->常规->设置为不使用UNICODE,发现设置为多字节字符集也可以。发现用VS2005打开VC6的源代码,转换后是使用的多字节字符集。在VS2008,vs2010中,项目->属性->常规->字符集:改为“使用多字节字符集”即可。(关于此处解释,来源于网友http://blog.sina.com.cn/s/blog_7dc276cd01012q5x.html,谢谢分享。)

    6.运行成功

      测试一下单击

    测试一下键盘字母我按下的是a,

    在测试一下退出

    比较好使。到此,第一个小栗子照搬结束。

  • 相关阅读:
    常用排序算法(七)归并排序
    常用排序算法(六)堆排序
    常用排序算法(五)选择排序
    常用排序算法(四)希尔排序
    常用排序算法(三)直接插入排序
    常用排序算法(二)快速排序
    常用排序算法(一)冒泡排序
    Linux内核中双向链表的经典实现
    回溯法
    迪杰斯特拉Dijkstra算法介绍
  • 原文地址:https://www.cnblogs.com/xueniwawa/p/3992844.html
Copyright © 2011-2022 走看看