Rover12421's Blog

The End.

VS2008 自定义DialogBased Application向导<一>

制作过程:
1.制作一个对话框工程
2.创建一个空向导
3.制作对话框向导
4.怎么让别人使用你制作的向导

制作前,先说下VS路径。我是用的是默认路径:C:\Program Files\Microsoft Visual Studio 9.0\VC 。如果不是这个路径的,请修改成对用的目录就行。后面不再提示。

1.制作一个DialogBased Application(对话框应用程序)程序。

image

新建一个Win32项目,配置使用默认的就行。我新建的项目是Win32DLG。先看下这个项目有哪些文件

image

一共是10个文件。首先我们需要修改的是资源文件-—Win32DLG.rc。这里的修改很简单。新建一个Dialog对话框资源或直接修改现有的ABOUT对话框资源也行。我用的新建。在Dialog上点右键,插入Dialog.

image

默认的界面如下。我们只保留一个确定按钮。调整界面大小,标题,风格等等,这些很容易就不说了。相信大家都会。

image

我修改的如下,并修改确认按钮的ID为 IDC_OK。主界面的ID为IDD_Main.

image

接着删除无用的资源IDD_ABOUTBOX和IDC_WIN32DLG

image image

界面就修改好了。接着就是重点,修改Win32DLG.cpp文件。除了包含的头文件和WinMain函数,其他全部删除。WinMain函数里也只保留前两句,和return。并把“return (int) msg.wParam;”修改成“return 0;”

image

然后在WinMain函数里添加一条DialogBox,来显示我们的主界面

DialogBox(hInstance, MAKEINTRESOURCE(IDD_Main), NULL, WinProc);

再在后面添加主界面的处理函数WinProc,以及主界面的载入和关闭事件函数Main_OnInitDialog,Main_OnClose,和OnCommand事件函数Main_OnCommand。

完成的Win32DLG.cpp代码如下

// Win32DLG.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "Win32DLG.h"

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    DialogBox(hInstance, MAKEINTRESOURCE(IDD_Main), NULL, WinProc);
     return 0;
}

BOOL WINAPI WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
        HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }

    return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
    case IDC_OK:
        {
            MessageBox( hwnd, _T("HelloWorld"), _T("OK"), MB_OK );
        }
        break;
    default:
        break;
    }
}

void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}

主要的函数都写好了,按钮的事件也添加到Main_OnCommand里了。现在就是要处理头文件。

打开Win32DLG.h头文件,添加函数声明。先看看我们在Win32DLG.cpp文件里用到了那些函数(WinMain函数是入口函数,不用管)。

WinProc,Main_OnInitDialog,Main_OnCommand,Main_OnCommand

一共用了四个函数。那就把这四个函数的声明添加到Win32DLG.h头文件里。修改完成的头文件Win32DLG.h如下:

#pragma once

#include "resource.h"
BOOL WINAPI WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
void Main_OnClose(HWND hwnd);

做完这些,这个程序基本完成了,但是你编译会发现,竟然还有错误。这是因为我们还缺少一共头文件,没包含进来。这个头文件是-—windowsx.h。你可以写到Win32DLG.cpp,也可以写到Win32DLG.h。不过,我建议是把他和windows.h放在一起-—添加到stdafx.h里。打开stdafx.h,你会看到一句#include <windows.h>。我们就在下面添加#include <windowsx.h>。这里就不贴代码了。

最后编译完成。没问题了。我们就继续第二步。

Comments