我也碰到过。可能是多次加载模块的原因。打开对话框需要很多提供支持的dll模块。
解决方案 »
- SQL语句的字符串问题
- 高分求解excel数据源操作的奇怪问题
- 如何将DataGrid中显示所有的列名读去出来?
- 请教:vc6下“鼠标滑轮事件”的问题--GET_WHEEL_DELTA_WPARAM()函数无法识别
- 求助一个服务监控的问题
- 在每次recv()前想先清空socket缓冲区,不知道有没有办法?
- 请教关于什么是堆的问题(我给120分)
- 中间件 指的是什么?
- 谁能回答我的问题?一个关于滚动视图的问题?
- 请问怎样用汇编写Win32 Console Application啊?
- “atoi”: 不能将参数 1 从“ATL::CStringT<BaseType,StringTraits>”转换为“const char *”
- 请教一个关于IOCP的低级问题
{
switch (message)
{
case WM_NOTIFY:
return TRUE;
case WM_INITDIALOG:
MoveWindow(hDlg, TREEWIDTH + SETSPACE * 2, SETSPACE, SETDLGWIDTH, SETDLGHIGH, TRUE);
for(int i = IDC_COMBO1; i < IDC_COMBO10 + 1; i++)
{
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"空格");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"回车");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"z");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"Shift");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"左Shift");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"右Shift");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"Tab");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"`");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)";");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"\'");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)",");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)".");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"/");
SendMessage(GetDlgItem(hDlg, i), CB_ADDSTRING, 0, (LPARAM)"[");
}
SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_SELECTSTRING, 0, (LPARAM)asc2name(set.inputPy));
SendMessage(GetDlgItem(hDlg, IDC_COMBO2), CB_SELECTSTRING, 0, (LPARAM)asc2name(set.inputEn));
SendMessage(GetDlgItem(hDlg, IDC_COMBO3), CB_SELECTSTRING, 0, (LPARAM)asc2name(set.overEn));
SendMessage(GetDlgItem(hDlg, IDC_COMBO4), CB_SELECTSTRING, 0, (LPARAM)asc2name(set.CreateCi));
SendMessage(GetDlgItem(hDlg, IDC_COMBO5), CB_SELECTSTRING, 0, (LPARAM)asc2name(set.SelMask));
for(int i=0; i<5; i++)
{
SendMessage(GetDlgItem(hDlg, IDC_COMBO6 + i), CB_SELECTSTRING, 0, (LPARAM)asc2name(set.Select[i]));
}
return TRUE;
case WM_CLOSE:
DestroyWindow(hDlg);
return TRUE;
default:
;
}
return FALSE;
}
这个对话框建立的时候变慢得最明显,可以看到,它只是建立一些组合框,并初始化它们,总共有十个组合框,每一个需要添加15个选项,总共也不过150个,可为什么建立会越来越慢?
加载****DLL,
加载****DLL,
等等,你的对话框作为主线程的东西来说的话,会出现你说的变慢的情况。但是你开辟一个次线程,这个线程来管理你的那个对话框,每次打开开启次线程,关闭的时候次线程结束,释放次线程所有资源。
这样的话,你对话框打开时间基本稳定。