C++ 如何模式显示一个对话框
我新建了一个对话框程序运行的时候进入主界面请问怎样显示我建的对话框?告诉我两种方法:模式跟非模式.谢谢了...
我新建了一个对话框
程序运行的时候进入主界面
请问怎样显示我建的对话框?
告诉我两种方法:模式跟非模式.
谢谢了 展开
程序运行的时候进入主界面
请问怎样显示我建的对话框?
告诉我两种方法:模式跟非模式.
谢谢了 展开
4个回答
展开全部
如何使用HTML中的模式对话框
mshtml.dll中的函数SHOWHTMLDIALOGFN是用来显示一个HTML对话框的,但它需要用于字符串和其它事务转换的COM要素,为了简化所有这些工作,笔者利用一个类来对COM要素进行封装如下:
class CMshtmlDialog
{
public:
void SetDlgOptions(LPCTSTR lpszOptions);
void SetSize(int x, int y);
LPCVARIANT GetReturnVariant();
CString GetReturnString();
void SetParam(LPCTSTR lpszArgs);
void SetParam(VARIANT* pvarArgs);
virtual int DoModal();
CMshtmlDialog(LPCTSTR lpszURL, BOOL bRes = FALSE, CWnd* pParent = NULL);
CMshtmlDialog (UINT nResID, CWnd* pParent = NULL);
CMshtmlDialog ( );
virtual ~ CMshtmlDialog( );
private:
inline void ResourceToURL(LPCTSTR lpszURL);
void CommonConstruct();
protected:
HWND m_hWndParent;
CString m_strOptions;
COleVariant m_varArgs, m_varReturn;
CString m_strURL;
HINSTANCE m_hInstMSHTML;
};
// CMshtmlDialog类的实现文件.
CMshtmlDialog :: CMshtmlDialog ()
{
TRACE0("Warning: Initialization may not be done: Non Functional contructor");
}
CMshtmlDialog::~ CMshtmlDialog()
{
//释放Mshtml.dll
::FreeLibrary(m_hInstMSHTML);
}
CMshtmlDialog:: CMshtmlDialog(UINT nResID, CWnd* pParent/*= NULL*/)
{
m_hWndParent = pParent ? pParent-〉GetSafeHwnd() : NULL;
CString strTemp;
strTemp.Format("%d", nResID);
ResourceToURL(strTemp);
CommonConstruct();
}
CMshtmlDialog::CMshtmlDialog(LPCTSTR lpszURL, BOOL bRes, CWnd* pParent/*= NULL*/)
{
m_hWndParent = pParent ? pParent-〉GetSafeHwnd() : NULL;
if (bRes)
{
ResourceToURL(lpszURL);
}
else
m_strURL = lpszURL;
CommonConstruct();
}
int CMshtmlDialog::DoModal()
{
//First get the proc ShowHTMLDialog
SHOWHTMLDIALOGFN *pfnShowHTMLDialog;
pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(m_hInstMSHTML, TEXT("ShowHTMLDialog"));
if (!pfnShowHTMLDialog)
return -1;
//Now create a URL Moniker
IMoniker* pmk = NULL;
BSTR bstrURL = m_strURL.AllocSysString();
CreateURLMoniker(NULL, bstrURL, &pmk);
if (!pmk)
return -1;
TCHAR* pchOptions = m_strOptions.IsEmpty() ? NULL : m_strOptions.GetBuffer(0);
//Now show the HTML Dialog
HRESULT hr = (*pfnShowHTMLDialog)(m_hWndParent, pmk, m_varArgs, pchOptions, m_varReturn);
if (FAILED(hr))0
return -1;
return 0;
}
void CMshtmlDialog::CommonConstruct()
{
m_hInstMSHTML = ::LoadLibrary(TEXT("MSHTML.DLL"));
}
inline void CMshtmlDialog::ResourceToURL(LPCTSTR lpszURL)
{
HINSTANCE hInstance = AfxGetResourceHandle();
ASSERT(hInstance != NULL);
LPTSTR lpszModule = new TCHAR[_MAX_PATH];
if (GetModuleFileName(hInstance, lpszModule, _MAX_PATH))
{
m_strURL.Format(_T("res://%s/%s"), lpszModule, lpszURL);
}
delete []lpszModule;
}
void CMshtmlDialog::SetParam(VARIANT *pvarArgs)
{
m_varArgs = pvarArgs;
}
void CMshtmlDialog::SetParam(LPCTSTR lpszArgs)
{
m_varArgs = lpszArgs;
}
CString CMshtmlDialog::GetReturnString()
{
ASSERT(m_varReturn.vt == VT_BSTR);
CString str = m_varReturn.bstrVal;
return str;
}
LPCVARIANT CMshtmlDialog::GetReturnVariant()
{
return (LPCVARIANT)m_varReturn;
}
void CMshtmlDialog::SetSize(int x, int y)
{
m_strOptions.Format("dialogWidth: %d; dialogHeight: %d", x, y);
}
void CMshtmlDialog::SetDlgOptions(LPCTSTR lpszOptions)
{
m_strOptions = lpszOptions;
}
使用CMshtmlDialog的一个简单例子
比如我们要在一个关于对话框里使用这个类,我们所要做工作是写一个HTML文件并把它以IDR_ABOUT_HTM包含进资源文件里。这里列出OnAppAbout的函数如下:
void CHDDemoApp::OnAppAbout()
{
CMshtmlDialog dlg(IDR_ABOUT_HTM, AfxGetMainWnd());
dlg.DoModal();
}
还可以利用构造函数传递字符串资源或要显示的URLs,通过使用HTML中的图形和声音资源就可以在关于对话框中显示一个复杂的效果。
http://www.builder.com.cn/2007/1019/568011.shtml
mshtml.dll中的函数SHOWHTMLDIALOGFN是用来显示一个HTML对话框的,但它需要用于字符串和其它事务转换的COM要素,为了简化所有这些工作,笔者利用一个类来对COM要素进行封装如下:
class CMshtmlDialog
{
public:
void SetDlgOptions(LPCTSTR lpszOptions);
void SetSize(int x, int y);
LPCVARIANT GetReturnVariant();
CString GetReturnString();
void SetParam(LPCTSTR lpszArgs);
void SetParam(VARIANT* pvarArgs);
virtual int DoModal();
CMshtmlDialog(LPCTSTR lpszURL, BOOL bRes = FALSE, CWnd* pParent = NULL);
CMshtmlDialog (UINT nResID, CWnd* pParent = NULL);
CMshtmlDialog ( );
virtual ~ CMshtmlDialog( );
private:
inline void ResourceToURL(LPCTSTR lpszURL);
void CommonConstruct();
protected:
HWND m_hWndParent;
CString m_strOptions;
COleVariant m_varArgs, m_varReturn;
CString m_strURL;
HINSTANCE m_hInstMSHTML;
};
// CMshtmlDialog类的实现文件.
CMshtmlDialog :: CMshtmlDialog ()
{
TRACE0("Warning: Initialization may not be done: Non Functional contructor");
}
CMshtmlDialog::~ CMshtmlDialog()
{
//释放Mshtml.dll
::FreeLibrary(m_hInstMSHTML);
}
CMshtmlDialog:: CMshtmlDialog(UINT nResID, CWnd* pParent/*= NULL*/)
{
m_hWndParent = pParent ? pParent-〉GetSafeHwnd() : NULL;
CString strTemp;
strTemp.Format("%d", nResID);
ResourceToURL(strTemp);
CommonConstruct();
}
CMshtmlDialog::CMshtmlDialog(LPCTSTR lpszURL, BOOL bRes, CWnd* pParent/*= NULL*/)
{
m_hWndParent = pParent ? pParent-〉GetSafeHwnd() : NULL;
if (bRes)
{
ResourceToURL(lpszURL);
}
else
m_strURL = lpszURL;
CommonConstruct();
}
int CMshtmlDialog::DoModal()
{
//First get the proc ShowHTMLDialog
SHOWHTMLDIALOGFN *pfnShowHTMLDialog;
pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(m_hInstMSHTML, TEXT("ShowHTMLDialog"));
if (!pfnShowHTMLDialog)
return -1;
//Now create a URL Moniker
IMoniker* pmk = NULL;
BSTR bstrURL = m_strURL.AllocSysString();
CreateURLMoniker(NULL, bstrURL, &pmk);
if (!pmk)
return -1;
TCHAR* pchOptions = m_strOptions.IsEmpty() ? NULL : m_strOptions.GetBuffer(0);
//Now show the HTML Dialog
HRESULT hr = (*pfnShowHTMLDialog)(m_hWndParent, pmk, m_varArgs, pchOptions, m_varReturn);
if (FAILED(hr))0
return -1;
return 0;
}
void CMshtmlDialog::CommonConstruct()
{
m_hInstMSHTML = ::LoadLibrary(TEXT("MSHTML.DLL"));
}
inline void CMshtmlDialog::ResourceToURL(LPCTSTR lpszURL)
{
HINSTANCE hInstance = AfxGetResourceHandle();
ASSERT(hInstance != NULL);
LPTSTR lpszModule = new TCHAR[_MAX_PATH];
if (GetModuleFileName(hInstance, lpszModule, _MAX_PATH))
{
m_strURL.Format(_T("res://%s/%s"), lpszModule, lpszURL);
}
delete []lpszModule;
}
void CMshtmlDialog::SetParam(VARIANT *pvarArgs)
{
m_varArgs = pvarArgs;
}
void CMshtmlDialog::SetParam(LPCTSTR lpszArgs)
{
m_varArgs = lpszArgs;
}
CString CMshtmlDialog::GetReturnString()
{
ASSERT(m_varReturn.vt == VT_BSTR);
CString str = m_varReturn.bstrVal;
return str;
}
LPCVARIANT CMshtmlDialog::GetReturnVariant()
{
return (LPCVARIANT)m_varReturn;
}
void CMshtmlDialog::SetSize(int x, int y)
{
m_strOptions.Format("dialogWidth: %d; dialogHeight: %d", x, y);
}
void CMshtmlDialog::SetDlgOptions(LPCTSTR lpszOptions)
{
m_strOptions = lpszOptions;
}
使用CMshtmlDialog的一个简单例子
比如我们要在一个关于对话框里使用这个类,我们所要做工作是写一个HTML文件并把它以IDR_ABOUT_HTM包含进资源文件里。这里列出OnAppAbout的函数如下:
void CHDDemoApp::OnAppAbout()
{
CMshtmlDialog dlg(IDR_ABOUT_HTM, AfxGetMainWnd());
dlg.DoModal();
}
还可以利用构造函数传递字符串资源或要显示的URLs,通过使用HTML中的图形和声音资源就可以在关于对话框中显示一个复杂的效果。
http://www.builder.com.cn/2007/1019/568011.shtml
展开全部
把CDialog x;声明在CMainFrame类里,即在这个类的.h文件里声明一下,然后
void CMainFrame::OnMe()
{
x.Create(IDD_DIALOG1,this);//这里创建窗口。
x.ShowWindow(SW_SHOW);//显示。
}
void CMainFrame::OnOk()
{
x.ShowWindow(SW_HIDE); //这里设置隐藏
//下面等等操作对实例化的对话框对象x
}
void CMainFrame::OnMe()
{
x.Create(IDD_DIALOG1,this);//这里创建窗口。
x.ShowWindow(SW_SHOW);//显示。
}
void CMainFrame::OnOk()
{
x.ShowWindow(SW_HIDE); //这里设置隐藏
//下面等等操作对实例化的对话框对象x
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DoModal() 模式
Show() 非模式
Show() 非模式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
非模态对话框:
Cmydlg *dlg=new Cmydlg;
dlg->Create(IDD_MYDLG,NULL);
dlg->ShowWindow(SW_SHOW);
模态对话框:
Cmydlg dlg;
dlg.DoModal();
其中Cmydlg是对话框类,建立对话框以后,按ctrl+w快捷键,出来类向导,然后新建一个对话框类,命名为Cmydlg 然后在函数中调用就行,注意要包含对话框类的头文件
另外,你问问题是不是应该给点悬赏分啊
Cmydlg *dlg=new Cmydlg;
dlg->Create(IDD_MYDLG,NULL);
dlg->ShowWindow(SW_SHOW);
模态对话框:
Cmydlg dlg;
dlg.DoModal();
其中Cmydlg是对话框类,建立对话框以后,按ctrl+w快捷键,出来类向导,然后新建一个对话框类,命名为Cmydlg 然后在函数中调用就行,注意要包含对话框类的头文件
另外,你问问题是不是应该给点悬赏分啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询