对话框回调函数的问题

#include <windows.h>
#include "resource.h"
 
HWND hwnd_B;
HINSTANCE g_hInstance;
 
// 函数声明
LRESULT CALLBACK Proc_A(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK Proc_B(HWND , UINT, WPARAM , LPARAM );
 
// 主函数
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
     g_hInstance = hInstance;
     HWND hwnd_A = CreateDialog(g_hInstance,(LPCTSTR)(IDD_DIALOG_MAIN),NULL,(DLGPROC)Proc_A);
    
     ::SetWindowPos(hwnd_A, HWND_TOP, 250,200,540, 310, SWP_SHOWWINDOW);
     ::UpdateWindow(hwnd_A);
    
     MSG msg;
 
     if( NULL == hwnd_A )
     {
         ::MessageBox( NULL, "CreateWindow error", "error", MB_OK );
         return -1;
     }
 
     while (GetMessage(&msg, NULL, 0, 0))
     {
TranslateMessage(&msg);
         DispatchMessage(&msg);
     }
     return msg.wParam;
}
 
// 回调函数A
LRESULT CALLBACK Proc_A(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
         case WM_INITDIALOG:
              {
                   return TRUE;
              }
         case WM_COMMAND:
              {
                   if (LOWORD(wParam) == IDOK)
                   {
                       hwnd_B = CreateDialogA( g_hInstance,
                            (LPCTSTR)(IDD_DIALOG_STUDENT),
                            hDlg,
                            (DLGPROC)Proc_B);
                       ::ShowWindow(hwnd_B,SW_SHOW);
                       ::UpdateWindow(hwnd_B);
                       return TRUE;
                   }
                   if (LOWORD(wParam) == IDCANCEL)
                   {
                       PostQuitMessage(0);
                       return TRUE; 
                   }
              }
         case WM_DESTROY:
              PostQuitMessage(0);
     }
    return FALSE;
}
 
// 回调函数B
LRESULT CALLBACK Proc_B(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
         case WM_INITDIALOG:
              {
                   return TRUE;
              }
         case WM_COMMAND:
              {
                   if (LOWORD(wParam) == IDOK)
                   {
                       return TRUE;
                   }
                   if (LOWORD(wParam) == IDCANCEL)
                   {
                       EndDialog(hDlg, LOWORD(hwnd_B));
                       return TRUE; 
                   }
              }
         case WM_DESTROY:
              PostQuitMessage(0);
     }
    return FALSE;
}
 
 
 

 

代码如上,令我不解的是最后一行的return FALSE 。
 
起初我不小心写成了return TRUE ,紧接着问题就来了,显示的子窗口只有按钮被绘制,其余部分都是原来屏幕的内容。
调用 ::UpdateWindow(hwnd_B); 问题依旧。
主窗口只能被拖动,不响应任何消息(我明明用的是非模态对话框)。子窗口的其他分支返回 TRUE 就可以,百思不得其解,究竟这个返回值意味着什么呢?windows在回调函数返回后干了些什么呢?希望有高手为我解惑。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值