如题,是win32的子对话框,通过dialogbox创建的对话框

解决方案 »

  1.   

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    { TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    这样有问题吗?
      

  2.   

    你的意思是一个 基于windows win32 Application 的程序下 创建了一个 
    基于MFC 的CDialogBox ?
      

  3.   

    DialogBoxPro()回调函数参数 注意写上窗口句柄什么的信息就好了
      

  4.   


    // 打开主配置界面
    DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_MAIN_CONFIG_DLG), NULL, MainCfgDlgProc); // 回调函数
    INT_PTR __stdcall MainCfgDlgProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)有什么问题吗?
      

  5.   

    是分少了吗?
    http://www.khgl.cn/html/62/n-1148262.html
    和这个问题差不多
      

  6.   

    BOOL CALLBACK DialogProc()
      

  7.   

    系统把它吃了~所以接收不到~~~额
    DialogBoxPro
      

  8.   

    dialogBoxPro( HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
    lParam)
    {    switch( msg)
        {
          
          .....
          .....
          .....
          // Hier will ich was einfügen!
          /* Und du hast IDC_NETWORKMODE als define dingens festgelet
          bekommst du mit GetDlgItem( hwndDlg, IDC_NETWORKMODE) das
          handle auf die ComboBox.*/
          //Also
          ComboBox_AddString( GetDlgItem( hwndDlg, IDC_NETWORKMODE),
          "Guten Tag");
          .....
        }    return false;
    }
      

  9.   

    创建的子对话框
    hWnd = CreateDialog(g_hInstance, (LPCTSTR)(IDD_BASIC_DLG), hWndDlg, (DLGPROC)BasicCfgDlgProc); hWnd = CreateDialog(g_hInstance, (LPCTSTR)(IDD_BASIC_DLG), hWndDlg, (DLGPROC)BasicCfgDlgProc);//////////////////////////////////////////////////////////////////////////
    // 基本设置对话框窗口过程
    INT_PTR __stdcall BasicCfgDlgProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    return m_BasicCfgDlg.DlgProc(hWndDlg, uMsg, wParam, lParam);
    }
    INT_PTR BasicCfgDlg::DlgProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    switch (uMsg)
    {
    case WM_KEYDOWN:
    {
    OnKeyDown(hWndDlg, uMsg, wParam, lParam);
    }
    break;
    case WM_SYSKEYDOWN:
    {
    OnKeyDown(hWndDlg, uMsg, wParam, lParam);
    }
    case WM_KEYUP:
    {
    OnKeyUp(hWndDlg, uMsg, wParam, lParam);
    }
    break;
    case WM_PAINT:
    {
    OnPaint(hWndDlg, uMsg, wParam, lParam);
    }
    break;
    case WM_INITDIALOG:
    {
    OnInitDialog(hWndDlg, uMsg, wParam, lParam);
    }
    break;
    case WM_COMMAND:
    { }
    break;
    case WM_DESTROY:
    break;

    case WM_LBUTTONDOWN:
    {
    int x = 0;
    }
    break;
    default:
    return DefWindowProc(hWndDlg, uMsg, wParam, lParam);
    } return 0;
    }
      

  10.   

    rrrfff 能解释的详细点吗?怎么解决
      

  11.   


    你仅仅这些语句是不够的,还要在回调函数中响应键盘消息
    BOOL CALLBACK DialogProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
        case WM_KEYDOWN:
            {
                OnKeyDown(hWndDlg, uMsg, wParam, lParam);
    //这是你的按下键的消息
            }
            break;
        case WM_SYSKEYDOWN:
            {
                OnKeyDown(hWndDlg, uMsg, wParam, lParam);
    //这是你的系统按键的消息
            }
        case WM_KEYUP:
            {
                OnKeyUp(hWndDlg, uMsg, wParam, lParam);
    //这是你的弹起键的消息
            }
            break;
        case WM_PAINT:
            {
                OnPaint(hWndDlg, uMsg, wParam, lParam);
            }
            break;
        case WM_INITDIALOG:
            {
                OnInitDialog(hWndDlg, uMsg, wParam, lParam);
            }
            break;
        case WM_COMMAND:
            {        }
            break;
        case WM_DESTROY:
            break;
        
        case WM_LBUTTONDOWN:
            {    
                int x = 0;
            }
            break;
        default:
            return DefWindowProc(hWndDlg, uMsg, wParam, lParam);        
        }    return 0;
    }
      

  12.   

    MSG msg; 
    while (GetMessage(&msg, NULL, 0, 0)) 
    { TranslateMessage(&msg); 
    DispatchMessage(&msg); 

    这个是消息循环
    子对话框的消息过程是按下面的方式写的
    BOOL CALLBACK DialogProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 

        switch (uMsg) 
        { 
        case WM_KEYDOWN: 
            { 
                OnKeyDown(hWndDlg, uMsg, wParam, lParam); 
    //这是你的按下键的消息 
            } 
            break; 
        case WM_SYSKEYDOWN: 
            { 
                OnKeyDown(hWndDlg, uMsg, wParam, lParam); 
    //这是你的系统按键的消息 
            } 
        case WM_KEYUP: 
            { 
                OnKeyUp(hWndDlg, uMsg, wParam, lParam); 
    //这是你的弹起键的消息 
            } 
            break; 
        case WM_PAINT: 
            { 
                OnPaint(hWndDlg, uMsg, wParam, lParam); 
            } 
            break; 
        case WM_INITDIALOG: 
            { 
                OnInitDialog(hWndDlg, uMsg, wParam, lParam); 
            } 
            break; 
        case WM_COMMAND: 
            {         } 
            break; 
        case WM_DESTROY: 
            break; 
        
        case WM_LBUTTONDOWN: 
            {    
                int x = 0; 
            } 
            break; 
        default: 
            return DefWindowProc(hWndDlg, uMsg, wParam, lParam);        
        }     return 0; 
    }
      

  13.   

    dialogbox函数的第一个参数问题?DialogBox(hInst, , hWnd, DialogProc);
      

  14.   

    WinMain传进来的应用程序实例的句柄吗?
    解释详细点啊,郁闷死我了,搞了好几天了
      

  15.   

    到底是DialogBox还是CreateDialog出来的Dialog?2种对话框是不同的!
      

  16.   

    debug 没是不是根本进入不了子窗口回调()?
      

  17.   

    这么多人搞一个对话框? 哈哈你的对话框上有具有接受焦点的控件
    所以你的对话框是没法收到WM_KEYDOWN消息的
    这些消息全部给控件拦住了
    要先在对话框拦截该消息,MFC或者WTL的做法是重写PreTranslateMessage这个虚函数
    你现在是基于纯WIN32 API
    所以你可以在消息循环里截获一下
      // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0))
    {

    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
      if (IsWindow(g_hDlg)&&(IsDialogMessage(g_hDlg, &msg)||IsChild(g_hDlg,msg.hwnd))) 
      {
      if (msg.message==WM_KEYDOWN)
      {
        MessageBox(NULL,_T("WM_KEYDOWN"),_T("你好!"),MB_OK);
      }
     
      }
    else
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    } }
    }