新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → 关于Windows APIs编程的简单过程(VC6篇) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3694 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 关于Windows APIs编程的简单过程(VC6篇) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 关于Windows APIs编程的简单过程(VC6篇)

    关于Windows APIs编程的简单过程(VC6篇)

    首先建立工程:

    第一步,你必须有Microsoft Visual C++6.0,并且运行它。

    第二步,点击File->New,弹出New对话框,选择左上角标签的"Projects",在列表框中选择"Win32 Application",并且将右边的"Project name"和"Location"分别设置好(工程名与工程路径,在VC下写代码一般都以工程的形式,不像DOS下以单一文件),点击OK。

        按此在新窗口浏览图片

    第三步,点击OK后,又弹出一个对话框,有三个选项"An empty project","A simple Win32
    application","A typeical "Hello World!" application",选择第三个并按Finish。这时会弹出一个叫"New Project Information"的对话框,不管它,点击OK继续。

        按此在新窗口浏览图片

    好了,现在我们的工程建立完毕,已经可以编译运行了,我们已经有了最基本的windows窗口了。

    在左边的"Workspace"窗口下有个File标签,

        按此在新窗口浏览图片    按此在新窗口浏览图片

    将其打开,里面就有一些由VC帮你建立的文件,打开xxx.cpp文件,让我们看看这个.cpp文件里有什么;你现在应该找到了一个很熟悉的函数吧,就是叫WinMain(...)函数,这就是我们windows窗口的主函数,就和DOS下的main()函数一样,怎么样?是不是觉得简单多了?

    这就是Microsoft Vistual C++为我们所建立的主文件
    // Test.cpp : Defines the entry point for the application.
    //

    /* "stdafx.h"这个文件是本工程的预处理文件,一般你要包含的标准头文件都可以包含在这个文件里 */
    #include "stdafx.h"
    #include "resource.h"

    #define MAX_LOADSTRING 100

    // Global Variables:
    HINSTANCE hInst; // current instance
    TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text

    // Foward declarations of functions included in this code module:
    ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);

    /* WinMain()函数就是我们所喜欢的主函数,也是程序的入口。 */
    int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
        // TODO: Place code here.
        MSG msg;
        HACCEL hAccelTable;

        // Initialize global strings
        LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadString(hInstance, IDC_TEST, szWindowClass, MAX_LOADSTRING);
        MyRegisterClass(hInstance);

        // Perform application initialization:
        if (!InitInstance (hInstance, nCmdShow))
        {
            return FALSE;
        }

        hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TEST);
        /* 你可以在这里进行你游戏需要的初始化等等 */
        // Main message loop:
        /* 可以很明显看出,下面的部分是一个循环体,这就是windows应用程序的循环,可将游戏代码放入这个循环之中,作为游戏的主体 */
        while (GetMessage(&msg, NULL, 0, 0))
        {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }

        return msg.wParam;
    }

    //
    // FUNCTION: MyRegisterClass()
    //
    // PURPOSE: Registers the window class.
    //
    // COMMENTS:
    //
    // This function and its usage is only necessary if you want this code
    // to be compatible with Win32 systems prior to the 'RegisterClassEx'
    // function that was added to Windows 95. It is important to call this function
    // so that the application will get 'well formed' small icons associated
    // with it.
    //
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
        WNDCLASSEX wcex;

        wcex.cbSize = sizeof(WNDCLASSEX);

        wcex.style = CS_HREDRAW | CS_VREDRAW;
        wcex.lpfnWndProc = (WNDPROC)WndProc;
        wcex.cbClsExtra = 0;
        wcex.cbWndExtra = 0;
        wcex.hInstance = hInstance;
        wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_TEST);
        wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
        wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wcex.lpszMenuName = (LPCSTR)IDC_TEST;
        wcex.lpszClassName = szWindowClass;
        wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

        return RegisterClassEx(&wcex);
    }

    //
    // FUNCTION: InitInstance(HANDLE, int)
    //
    // PURPOSE: Saves instance handle and creates main window
    //
    // COMMENTS:
    //
    // In this function, we save the instance handle in a global variable and
    // create and display the main program window.
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
        HWND hWnd;

        hInst = hInstance; // Store instance handle in our global variable

        hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

        if (!hWnd)
        {
            return FALSE;
        }

        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);

        /* 你也可以在这里进行你游戏需要的初始化等等
       我一般都喜欢把游戏图形初始化部分放在这里  */

        return TRUE;
    }

    //
    // FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
    //
    // PURPOSE: Processes messages for the main window.
    //
    // WM_COMMAND - process the application menu
    // WM_PAINT - Paint the main window
    // WM_DESTROY - post a quit message and return
    //
    //

    /* 这个就是所谓的windows消息循环体,里面处理着来至菜单和窗口的消息 */
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        int wmId, wmEvent;
        PAINTSTRUCT ps;
        HDC hdc;
        TCHAR szHello[MAX_LOADSTRING];
        LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

        switch (message)
        {
        case WM_COMMAND:  /* 应用程序的菜单响应部分 */
            wmId = LOWORD(wParam);
            wmEvent = HIWORD(wParam);
            // Parse the menu selections:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
            break;
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO: Add any drawing code here...
            RECT rt;
            GetClientRect(hWnd, &rt);
            DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }

    // Mesage handler for about box.
    /* 如果你点击菜单里的Help->About,应用程序会弹出对话框,这里就是这个对话框的消息循环体 */
    LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_INITDIALOG:
            return TRUE;

        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
            }
            break;
        }
        return FALSE;
    }

    这只是一个简单利用Windows APIs建立windows应用程序的例程,现在有了地基,接下来就是盖高楼了。 :)


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/9/28 15:12:00
     
     brucefu 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:11
      积分:94
      门派:IEEE.ORG.CN
      注册:2006/10/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给brucefu发送一个短消息 把brucefu加入好友 查看brucefu的个人资料 搜索brucefu在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看brucefu的博客2
    发贴心情 
    路过
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/10/9 14:30:00
     
     lgjxj 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:3
      积分:67
      门派:XML.ORG.CN
      注册:2006/5/28

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给lgjxj发送一个短消息 把lgjxj加入好友 查看lgjxj的个人资料 搜索lgjxj在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看lgjxj的博客3
    发贴心情 
    强,学习了,感谢为我们菜鸟提供教程
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/10/18 22:45:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/2/17 2:14:22

    本主题贴数3,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms