怎么样让基于对话框的应用有消息偱环?

Hover 2001-12-23 03:25:39
...全文
136 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hover 2001-12-26
  • 打赏
  • 举报
回复
给分
whool 2001-12-26
  • 打赏
  • 举报
回复
呵呵,这个问题我来告诉你如何解决,
我以前也碰到过的,这个和消息循环没有任何关系,因为你创建的是一个非模态对话框,你必须创建一个全局变量或用new去创建一个指向对话框的指针,你用局部变量当然不行,退出局部函数的作用域,他就会释放,所以一闪就没有了,呵呵,试试,别忘了给分。

CCDXTestDlg dlg;

BOOL CCDXTestApp::InitInstance()
{
.......


m_pMainWnd = &dlg;
dlg.Create(CCDXTestDlg::IDD,NULL);
dlg.ShowWindow(m_nCmdShow);
dlg.UpdateWindow();
return true;

}
hesoft 2001-12-25
  • 打赏
  • 举报
回复
UP+
Hover 2001-12-25
  • 打赏
  • 举报
回复
加分了
Hover 2001-12-25
  • 打赏
  • 举报
回复
奇怪的是对话框闪了一下就没了,这个消息循环只收到一个WM_QUIT消息。
Hover 2001-12-25
  • 打赏
  • 举报
回复
是这样的,用应用向导建立的对话框应用程序。
我想让它在无消息时做些事情,重载了应用类的Run(),在这里面建立了一个消息循环。
并且修改对话框创建代码,把DoModal改成 Create 后返回一个true;


BOOL CCDXTestApp::InitInstance()
{
.......

CCDXTestDlg dlg;
m_pMainWnd = &dlg;
dlg.Create(CCDXTestDlg::IDD,NULL);
dlg.ShowWindow(m_nCmdShow);
dlg.UpdateWindow();
return true;

}




int CCDXTestApp::Run()
{
// TODO: Add your specialized code here and/or call the base class
CCDXTestDlg* pDlg=(CCDXTestDlg*)AfxGetMainWnd();
for(;;)
{
if(::PeekMessage(&m_msgCur,NULL,NULL,NULL,PM_NOREMOVE))
{
if(!PumpMessage())
return ExitInstance();
}
else
pDlg->UpDisp();
}
ASSERT(false);
return CWinApp::Run();
}

zzh 2001-12-23
  • 打赏
  • 举报
回复
在WINPROC函数中自已使用一个消息循环进行处理。
cmpp 2001-12-23
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/TopicView.asp?id=436746
thomas269 2001-12-23
  • 打赏
  • 举报
回复
你是不是說不用DoModal呀, 你用DoModal就一定無Message Loop(在你的程序中沒有, 但實際上有), 但如果Message Loop由你實現的話, 就要用dlg.Create(...)來建立對話框, 用dlg.ShowWindow(...), dlg.UpdateWindow()來顯示對話框, 最後加入
MSG msg;
while (GetMessage(....))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
xiaoxiaohan 2001-12-23
  • 打赏
  • 举报
回复
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
About为处理消息偱环的函数:
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
anson_program 2001-12-23
  • 打赏
  • 举报
回复
说清楚点啊?什么消息循环啊???
dahua 2001-12-23
  • 打赏
  • 举报
回复
?什么意思啊?
基于对话框的应用本来就有消息循环啊,
任何windows的程序都有消息循环吧

16,472

社区成员

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

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

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