CDialog派生类CMyDialog,在程序中要同时创建这类对话框(非模式)若干个,
最多时达10多个,有什么方便、简单的方法?其实功能类似于多文档里的子窗口。
解决方案 »
- 推荐几个VC编程好站点。
- OnInitDialog初始化的时候遇到的一个问题.
- 第三方dll调用
- 200分请问IE里ActiveX控件如何获取WM_ACTIVEAPP消息,或者如何获取IE的WM_ACTIVEAPP消息
- 我的窗口是WS_EX_ACCEPIFILES,如何处理拖拽消息呢
- 多文档程序,怎样在初始化时打开多个文档而不出现“选择打开文档”对话框?
- 100分,请教:关闭IE时,销毁ACTIVEX控件的问题。
- 工具栏上的按钮怎样设置按下的状态?
- 我想使我的文本编辑器加入“find”功能,应该如何实现
- 用WinInet编程时如何确定文件下载的进度,就是和IE低栏的下载进度条一样,是如何实现的?
- SDK程序请教
- 请问_dosdate_t这个结构是在那个头文件里被定义的?
CYourDlg dlg
dlg.DoModal()
CYourDlg dlg
dlg.Create(...)
dlg.ShowWindow(...)
不是模式对话框,是要dlg.Create()的,
而且要同时创建10多个。
CYourDlg dlgarray[MAX_DIALOG_NUM];for(int i = 0;i < MAX_DIALOG_NUM;i ++)
{
dlgarray[i].Create(...);
dlgarray[i].ShowWindow(SW_SHOW);
}
解决方法如下:
1.你可以把CYourDlg dlgarray[MAX_DIALOG_NUM];作为全部变量。
2.或者你把他作为一个类成员变量。再试一下。
要 Create 10个对话框,就要加入10个对话框资源,这10个对话框又
要分别对应10个CDialog派生类CDialog1、CDialog2...CDialog10,
再分别调用Create函数,操作起来很不方便。
如果可以做到像多文档那样,可以新建多个相同的子窗口就方便多了。
MSDN 查 InitModalIndirect
dlg1[i].ShowWindow(SW_SHOW);可单独写一test试一试。
建议用:CMyDialog * m_pDlgs[10];
用new 分派内存赋值,然后用Create.
最后别忘清除内存
做过这种东西,肯定可以的。
不过,如果只是要求对话框管理方便的话,可以用一个*CDialog 来集中管理,比如平铺之类的。 或者,要求高一点的话,从CDialog派生一个CMyDialog,里边留下一些虚函数做管理接口,然后你所有的对话框都从CMyDialog派生就行了,我说明白了吗?
不行呢?
for (int i = 0; i < 10; i++)
{
CString str; str.Format("No. %d", i);
dlg[i].Create(IDD_VIDEO_DIALOG, this);
dlg[i].SetWindowText(str);
dlg[i].UpdateWindow();
dlg[i].ShowWindow(SW_SHOW);
}
HINSTANCE hInstance, // handle to module
LPCTSTR lpTemplate, // dialog box template name
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc // dialog box procedure
);完全可以公有一个消息处理函数,只要在消息处理函数的代码中对各个子窗口加标记的办法来分别处理各自的状态即可。标记怎么加?用SetWindowLong(...)第三个参数可附加自义数据:LONG SetWindowLong(
HWND hWnd, // handle to window
int nIndex, // offset of value to set
LONG dwNewLong // new value
);怎么获得?用:LONG GetWindowLong(
HWND hWnd, // handle to window
int nIndex // offset of value to retrieve
);
netsbull(网牛)“ID资源不一样可以改改资源头文件,把ID改成连续的整数,这样可以做简单的循环”这句有道理,我作过动态生成连续的按钮,标签,绝对没问题的。
http://www.csdn.net/cnshare/soft/12/12854.shtm
任务条上的按钮就是用这种方法做的,效果还不错吧?
To shaohua(美女?我抱!警察?我闪!我是流氓我怕谁):生成按钮之类的是没问题呀。
但要生成多个同一类的对话框就有问题了。
不信你试试,如果问题有这么简单就不用这么烦了 ^_^
{
CString str;
str.Format("No. %d", i);
dlg[i].Create(IDD_VIDEO_DIALOG, this);
dlg[i].SetWindowText(str);
dlg[i].UpdateWindow();
dlg[i].ShowWindow(SW_SHOW);
}
for (ii=0;ii<10;ii++)
{
CString str;
str.Format("No. %d", ii);
Dlg[ii].Create(IDD_DIALOG1, this);
Dlg[ii].SetWindowText(str);
Dlg[ii].UpdateWindow();
Dlg[ii].ShowWindow(SW_SHOW);
}
在我的机器上编译没问题,10个对话框的标题不一样,从0-9,
切换到别的程序再切换回来,也是正常的。我是在98和2000下都对的。
我现在用MDI解决了问题,谢谢大家的参与。 结帐