游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3067|回复: 5

Dialog控件事件无响应

[复制链接]

15

主题

20

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2008-2-29 15:59:00 | 显示全部楼层 |阅读模式
建了个空的 Window C++项目完后又添加了个默认Dialog控件(RC), 并在主执行文件写下了这些代码:

int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int nCmdShow)
{
        WNDCLASS wc;
        MSG      Msg;

        wc.style         = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc   = WindowProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = DLGWINDOWEXTRA;
        wc.hInstance     = hInst;
        wc.hIcon         = LoadIcon(hInst, IDI_APPLICATION);
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
        wc.lpszMenuName  = NULL;
        wc.lpszClassName = g_szClass;
        RegisterClass(&wc);

        g_hWnd = CreateDialog( hInst, MAKEINTRESOURCE( IDD_DLG_TEST ), 0, NULL );
        UpdateWindow( g_hWnd );
        ShowWindow( g_hWnd, nCmdShow );

        while( GetMessage( &Msg, NULL, 0, 0 ))
        {
                TranslateMessage( &Msg );
                DispatchMessage( &Msg );
        }

        UnregisterClass(g_szClass, hInst);

        return 0;
}

LRESULT CALLBACK WindowProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
        switch( msg )
        {
                case WM_INITDIALOG:
                return TRUE;

                case WM_COMMAND:
                        switch( LOWORD( wParam ))
                        {
                        case IDOK:
                                MessageBox( hDlg, L"这是一个测试", L"测试", MB_OK );
                                return TRUE;

                        case IDCANCEL:
                                EndDialog( hDlg, FALSE );
                                return TRUE;
                                }

                case WM_DESTROY:
                        PostQuitMessage(0);
                        return TRUE;

                default: return DefWindowProc(hDlg, msg, wParam, lParam);
        }
        return 0;
}

可是, Dialog控件也出现了但就是不执行控件事件, 请问还要改哪里和设置哪里( VS2003), 谢谢

3

主题

137

帖子

151

积分

注册会员

Rank: 2

积分
151
QQ
发表于 2008-3-1 23:16:00 | 显示全部楼层

Re:Dialog控件事件无响应

我认为你的 CreateDialog 根本没起作用吧?

22

主题

144

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2008-3-2 11:23:00 | 显示全部楼层

Re:Dialog控件事件无响应

windows编程思想明显出错:

主窗口怎么可能接受对话框按钮的事件?又不是用户自定义的消息也没有sendmessage。我不用看msdn都知道createdialog函数有个回调函数的指针参数,你把那个设为空,怎么可能os知道调用你程序里面的那个函数地址?
还是看看msdn上面有没有createdialog的例子吧,然后学学,我记得好像有。

这个没有什么初学者的弊病,我也常犯过。潜水太久,出来换一口气。

4

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2008-3-3 03:27:00 | 显示全部楼层

Re:Dialog控件事件无响应

看过《Windows程式设计》我才基本了解了对话框的使用,对于楼主的程序提一点个人拙见:

如果楼主想实现的是非模态对话框,CreateDialog的第二个参数应该是一个类的名字,比如你程序中的g_szClass
对话框的界面是要用文本自己写的(不知道VS2003有没有可视界面)因为其中要加入一行
CLASS 类的名字
这样程序和界面就可以连接起来了

flarez朋友,最后一个回调函数指针可以设置为NULL,因为第二个参数传递的类已经声明了回调函数的名称(wc.lpfnWndProc   = WindowProc;)

不过我觉得在
case IDCANCEL:
就不能只用
EndDialog( hDlg, FALSE );了,这样虽然对话框消失了,但进程还在运行,应该加一行PostQuitMessage(0);
不知道是不是这样?

22

主题

144

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2008-3-6 20:43:00 | 显示全部楼层

Re:Dialog控件事件无响应

楼上朋友……无语……

主窗口消息函数和模式对话框消息函数是有区别的,可以是同一个么?或者反着来……实践回答一切。

4

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2008-3-7 16:54:00 | 显示全部楼层

Re: Re:Dialog控件事件无响应

flarez: Reialog控件事件无响应

楼上朋友……无语……

主窗口消息函数和模式对话框消息函数是有区别的,可以是同一个么?或者反着来……实践回答一切。

    主窗口消息函数和模式对话框消息函数不应该是同一个,我同意.我猜测楼主是想建立一个只有对话框,没有窗口的程序,这个对话框应该是非模态的,您觉得呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 09:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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