模态对话框 messagebox

bunnydu 2011-09-21 01:52:26
父窗口生成一个模态对话框 模态对话框中再调用messagebox 为什么消息框点击任何东西都没反应,但可以拖动.
...全文
306 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
huaidan2012126 2011-09-22
  • 打赏
  • 举报
回复
You should use the dialog box procedure only if you use the dialog box class for the dialog box. This is the default class and is used when no explicit class is specified in the dialog box template. Although the dialog box procedure is similar to a window procedure, it must not call the DefWindowProc function to process unwanted messages. Unwanted messages are processed internally by the dialog box window procedure.

上面是MSDN的解释,对话框的窗口过程跟普通窗口过程不太一样,不能调用DefWindowProc,你也可以看看MFC和ATL中的源代码,对话框过程中对不需要的消息都是直接返回0,即使对话框类也提供了DefWindowProc实现,它也是直接return 0(转)
bunnydu 2011-09-21
  • 打赏
  • 举报
回复
解决了. default:
return DefWindowProc(hDlg, message, wParam, lParam);
这个删了就可以了. 什么原因我也不知道..
bunnydu 2011-09-21
  • 打赏
  • 举报
回复
求大神路过..
bunnydu 2011-09-21
  • 打赏
  • 举报
回复
messagebox的hwnd改为NULL 也没用. 如果用hwnd 的话,弹出消息框之后,之后的那个框不可以激活了.改成NULL 之前的框可以激活了.
huaidan2012126 2011-09-21
  • 打赏
  • 举报
回复
或者直接default:break;删除,也正常
huaidan2012126 2011-09-21
  • 打赏
  • 举报
回复

case WM_COMMAND:
if (wParam!=0)
{
switch(LOWORD(wParam))
case IDOK:
::MessageBox(hDlg,"nihao",0,0);
break;
case IDC_BUTTON1:
EndDialog(hDlg,NULL);
break;
default:
return DefWindowProc(hDlg, message, wParam, lParam);
}
break;

这行代码也出现了你说的问题,弹出框无响应,但是可以移动,但是改为default:break;之后,弹出框正常了,我也不知道什么原因,那个大神给说道说道
huaidan2012126 2011-09-21
  • 打赏
  • 举报
回复
if (lParam != 0)
{
switch (LOWORD(wParam))
{
case IDC_BUTTON21:
province_index = (int)SendMessage(GetDlgIt(hWnd,IDC_COMBO_PROVINCE3),CB_GETCURSEL,0,0);
GetDlgItemText(hWnd,IDC_COMBO_PROVINCE3,province_data>name,30);
GetDlgItemText (hWnd,IDC_EDIT21,province_data>discipline,30);
GetDlgItemText (hWnd,IDC_EDIT22,province_data->telephone,30);
if (modifyProvinceByIndex (head,province_index,data) == 0)
{
MessageBox(hWnd,TEXT("修改成功"),TEXT("提示"),MB_OK);
}

break;
case IDC_BUTTON22:
EndDialog(hWnd,0);
break;
size=13px] default:
break;
[[/size]
}
你再试一下?
许文君 2011-09-21
  • 打赏
  • 举报
回复
messagebox的hwnd改为NULL
bunnydu 2011-09-21
  • 打赏
  • 举报
回复
修改成功那个确定按了一直没反应.
bunnydu 2011-09-21
  • 打赏
  • 举报
回复
这是父窗口调用的一个模态对话框的回调函数, 这个有一个messagebox
BOOL CALLBACK ProcWinProvince(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
HWND hComboBox;
PROVINCEDATA data,*province_data=&data;
int province_index;
switch(Msg)
{
case WM_INITDIALOG:
{
hComboBox = GetDlgItem(hWnd,IDC_COMBO_PROVINCE3);
InitComboBox_Province(hComboBox);
SendMessage(hComboBox, CB_SETCURSEL , 0, 0L);
province_index = (int)SendMessage(GetDlgItem(hWnd,IDC_COMBO_PROVINCE3),CB_GETCURSEL,0,0);
if (NULL != (province_data = fetchProvinceByIndex(head,province_index)))
{
SetDlgItemText (hWnd,IDC_EDIT21,province_data->discipline);
SetDlgItemText (hWnd,IDC_EDIT22,province_data->telephone);
}
}
break;

case WM_COMMAND:
{
if (lParam != 0)
{
switch (LOWORD(wParam))
{
case IDC_BUTTON21:
province_index = (int)SendMessage(GetDlgItem(hWnd,IDC_COMBO_PROVINCE3),CB_GETCURSEL,0,0);
GetDlgItemText(hWnd,IDC_COMBO_PROVINCE3,province_data->name,30);
GetDlgItemText (hWnd,IDC_EDIT21,province_data->discipline,30);
GetDlgItemText (hWnd,IDC_EDIT22,province_data->telephone,30);
if (modifyProvinceByIndex (head,province_index,data) == 0)
{
MessageBox(hWnd,TEXT("修改成功"),TEXT("提示"),MB_OK);
}

break;
case IDC_BUTTON22:
EndDialog(hWnd,0);
break;

}
if (HIWORD(wParam) == CBN_CLOSEUP)
{
switch (LOWORD(wParam))
{
case IDC_COMBO_PROVINCE3:
province_index = (int)SendMessage(GetDlgItem(hWnd,IDC_COMBO_PROVINCE3),CB_GETCURSEL,0,0);
if (NULL == (province_data = fetchProvinceByIndex(head,province_index)) && province_index > 0)
{
SetDlgItemText (hWnd,IDC_EDIT21,TEXT("无信息"));
SetDlgItemText (hWnd,IDC_EDIT22,TEXT("无信息"));
}
else
{
SetDlgItemText (hWnd,IDC_EDIT21,province_data->discipline);
SetDlgItemText (hWnd,IDC_EDIT22,province_data->telephone);
}
break;
}
}
}
}
break;

case WM_DESTROY:
{
EndDialog(hWnd,0);
}
break;

default:
return DefWindowProc(hWnd, Msg, wParam, lParam );
}
return 0;
}


  • 打赏
  • 举报
回复
LZ说的明白点,最后贴出相关代码。。。
huaidan2012126 2011-09-21
  • 打赏
  • 举报
回复
代码?messagebox的消息拥有窗口是哪个?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧