小弟在开发过程中碰到一个小问题:在打开一个需要从数据库检索数据的对话框时,由于数据量大,所以发出打开对话框口令后总要过一会才能将对话框显示出来。
记得以前在使用PB开发时可以使用POSTEVENT方法来解决此类“显示速度慢”的问题,我试着使用了一下VC中的POSTMESSAGE方法,可是仍未能达到所需效果。我的具体操作如下:1。在RESOURCE.H中定义消息ID:WM_1
2.定义该对话框的消息映射:
BEGIN_MESSAGE_MAP(CFtpFileDlg, CDialog)
//{{AFX_MSG_MAP(CFtpFileDlg)
ON_MESSAGE(WM_1,LoadData)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()///LoadData()为装载数据所用方法3.在该对话框的InitDialog()中加入:
PostMessage(WM_1,0,0);运行结果:
对话框很快显示出来,但数据却未加载进来。//如果在InitDialog()直接加载LoadData(),虽然对话框显示速度较慢,但数据还是能加载成功。
不知各位是否遇到过此类小问题,请大家帮忙。

解决方案 »

  1.   

    在你的LoadData中增加一个 更新显示的函数好像是 UpdataData(FALSE);
      

  2.   

    在最耗时的程序段后面加上:MSG         msg;
    PeekMessage(&msg,NULL,0,0,PM_REMOVE);
    TranslateMessage(&msg);
    DispatchMessage(&msg);
      

  3.   

    你大概用的是vc自带的列表控件吧,简直就是垃圾一个,别说数据量大了,少量的数据也会造成程序响应极慢,网上有很多很好的控件,你去搜一搜,www.codeproject.com,www.vccode.com,治本的办法就是改用好的控件,否则再怎么也无济于事
      

  4.   

    谢谢大家的回复。
    也许是我问题说得不够清楚,其实需要不过是在一个对话框打开之后能立即执行该对话框上一个下达LOADDATA()到按钮的事件,但关键在于我希望该窗口先显示出来,然后再执行LOADDATA();
    而不是发出打开对话框命令后系统在初始化时先执行LOADDATA(),以至于等待很久才能将窗口显示出来。
      

  5.   

    增记时器,在数据显示之后初始化.在记时器第一次调用中,LoadData(),数据初始化之后可杀掉记时器.
      

  6.   

    增加计时器可以解决问题,在OnInitDialog()中调用
    SetTimer(1,500,NULL);
    响应void CTestDlg::OnTimer(UINT nIDEvent) 
    {
    LoadData();
    KillTimer(1);
    }