尝试过在OnInitDialog和OnShow和
通过自己发消息作,但每次都是对话框还没显示出来,MessageBox就出来了
通过自己发消息作,但每次都是对话框还没显示出来,MessageBox就出来了
解决方案 »
- 请教一下 select的问题
- 如何在PropertyPage中添加控件
- 好像很流行:我该如何在webbrowser控件中使用html脚本执行主程序的程序段(比如一个vc函数)?
- 超级难题,,,谁帮忙一下我
- 哈哈^oo^, Viper() 来领分,这是我承诺过的
- 请问怎么连接两个BSTR。
- 请问各位大虾怎样才能隐藏指定的系统托盘图标。如腾讯QQ的托盘图标等。
- 我想学windows编程,能不能给我一点建议啊?
- 一个小问题见笑了 SDI程序中如何在 CMainFrame 类函数里获得 CMyView 对象的指针?
- 棘手的问题!(帮一帮)
- mfc工程中使用c的代码文件?
- 过高程的朋友,向你们请教个问题
定义一个全局函数
UINT MyThreadProc( LPVOID pParam )
{
HWND hwnd = (HWND) pParam; while (!::IsWindowVisible(hwnd))
{
Sleep(50);
} MessageBox(hwnd, _T("Test"), NULL, MB_OK);
return 0;
}在你的对话框的OnInitDialog中加入如下代码:
AfxBeginThread(MyThreadProc, (VOID*) this->GetSafeHwnd());
启动一个辅助线程来进行处理
借鉴了一下你的思想,我用定时器搞得, OnInitDialog() 中SetTimer OnTimer
{
if(IsWindowVisible())
{
MessageBox(...);
KillTimer(....)
但有没有更好的办法?
DoModal();
MessageBox(..);
不行吗?
首先定义自己的消息
#define WM_MYMESSAGE 50000
在OnInitDialog中
PostMessage(MYMESSAGE );
第三步
BOOL CDialogDlg::PreTranslateMessage(MSG* pMsg)
{
if( IsDialogMessage( pMsg ) ){
switch(pMsg->message)
{
case WM_MYMESSAGE:
MessageBox("");
}
return TRUE;
}
else
return CDialog::PreTranslateMessage(pMsg);
}
当然也可以在对话框空闲的时候MessageBox,道理是一样,一个是系统内的消息,一个是自己定义的消息,但系统空闲发出的消息,不知为何找不到WM_KICKIDLE的定义,不过没关系,原理一样:)
下面的方法最简单:
Dialog类中加入一个成员变量
BOOL m_bFirstPaint;
构造函数中初始化:
m_bFirstPaint = TRUE;
重载Dialog的OnPaint:
void CMyDlg::OnPaint()
{
// 调用CDialog类的Paint处理。
CDialog::OnPaint(); if (m_bFirstPaint)
{
AfxMessageBox("message");
m_bFirstPaint = FALSE;
}
}搞定。
m_bFirstPaint=true,要么在关闭窗口时复值,要么在关闭对话框时,我看加上代码也差不多也哪么多
wm_setfocus
2.在自定义消息的处理函数中,调用MessageBox!
3.在对话框的OnInitDialog函数的最后调用
PostMessage(WM_YOURMSG,0,0);