VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1079|回复: 8

Win32程序下如何创建创建一个对话框?

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-5 20:30:01 | 显示全部楼层 |阅读模式
我需要在Win32的程序下加入一个对话框。
我先创建了一个对话框资源,然后用ClassWizard生成一个类。但是编译时总是出现“stdafx.h”不存在的问题!!!!!!!!
我想请教大家,怎样在Win32程序中加入一个对话框?

在线等.........
回复

使用道具 举报

0

主题

17

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-3-24 10:45:01 | 显示全部楼层
创建一个 WIN32 程序,完整的
点关于之后,就有对话框了
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-7 17:30:01 | 显示全部楼层
1 添加对话框资源
2 在WinMain函数里调用DialogBox函数
3 定义对话框的消息处理函数,格式参照MSDN
4 消息映射

<<Windows核心编程>>一书里面有具体的实例

INT_PTR CALLBACK MyDlgProc(          HWND hwndDlg,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);//窗口函数原型声明

BOOL Dlg_OnInitDialog(HWND hwnd,HWND hwndFocus,LPARAM lParam)//消息处理(必须)
{

}

VOID Dlg_OnCommand(HWND hwnd,int id,HWND hwndCtl,UINT codeNotify)//命令消息处理
{

}

INT_PTR CALLBACK MyDlgProc(          HWND hwndDlg,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
)   
{
        switch(uMsg)
        {
        case WM_INITDIALOG:
                return SetDlgMsgResult(hwndDlg,uMsg,HANDLE_WM_INITDIALOG( ( hwndDlg ) ,( wParam ),( lParam ),( Dlg_OnInitDialog )));
                break;  ////消息映射
        case WM_COMMAND:
                return SetDlgMsgResult(hwndDlg,uMsg,HANDLE_WM_COMMAND( ( hwndDlg ),( wParam ),( lParam ),( Dlg_OnCommand )));
                break;

        }
        return FALSE;
}


int WINAPI WinMain(          HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
)
{
        DialogBox( hInstance,MAKEINTRESOURCE( IDD_DLG ) , NULL , MyDlgProc);
}
回复

使用道具 举报

0

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-4-8 09:45:01 | 显示全部楼层
我知道上面的方式是可以的
有没有不用自己消息循环的方法,也就是如Dlg.Modal就能显示出来个简单对话框的方法
回复

使用道具 举报

0

主题

9

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-4-9 12:00:01 | 显示全部楼层
你可以自己封装一个对话框调用啊!
回复

使用道具 举报

0

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-4-9 22:00:01 | 显示全部楼层
win32程序下不能用classwizard吧?
需要用win32的一套来做。加入对话框资源后,调用
::DialogBox(...)
回复

使用道具 举报

0

主题

18

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-8-16 23:45:01 | 显示全部楼层
找本WIN32编程的书看看吧,都会讲的。
回复

使用道具 举报

0

主题

14

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-8-17 01:30:01 | 显示全部楼层
采用预编译的,再往下运行就可以了吧。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-17 06:15:01 | 显示全部楼层
//先声明对话框回调函数
LRESULT CALLBACK    YourDialog(HWND,UINT,WPARAM,LPARAM);//游戏菜单对话框的回调函数
//实现部分
LRESULT CALLBACK  YourDialog(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
    HDC   hdc   =   (HDC)wParam;  
        switch (message)
        {
                case WM_INITDIALOG:
                                return TRUE;

                case WM_COMMAND:
                        if (LOWORD(wParam) == IDOK)
                        {
                            EndDialog(hDlg, LOWORD(wParam));
                                return TRUE;
                        }
                       
                        break;
                 case XXXXXX:
                      这里面你还可以天加其他消息
                     break;
        }
    return FALSE;
}

//然后再你需要调用对话框的地方,比如在点击左键的时候
DialogBox(hInst, (LPCTSTR)IDD_MENU, hWnd, (DLGPROC)YourDialog)
你也可以通过对返回值的判定进行处理
switch(DialogBox(hInst, (LPCTSTR)IDD_MENU, hWnd, (DLGPROC)GameMenu))
{
   case OK:
case XXX
这个时候对话框就出来了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表