DHTMLDLG 界面制作
来源:互联网 发布:网络教育2018招生时间 编辑:程序博客网 时间:2024/06/06 03:46
DHTMLDLG 界面制作
dlg为dialog
与普通对话框的区别
1.类的继承关系
class CSingleDlg : public CDHtmlDialog
2.资源枚举
enum {
IDD = IDD_DLG_Single, IDH = IDR_HTML_SINGLE};
3.构造函数
CSingleDlg::CSingleDlg(CWnd* pParent /*=NULL*/)
: CDHtmlDialog(IDD_DLG_Single, IDR_HTML_SINGLE, pParent)
{
EnableAutomation();//此句不能少,少了dlg上的按件会无响应
}
4.rc资源
IDR_HTML_TESTHTMLDIALOG_DIALOG HTML "TestHtmlDialog.htm"
5-6做dlg与html交互用
5.event 动作
DECLARE_DHTML_EVENT_MAP()
//此间定义函数用于html发消息给,dlg,而dlg处理后不需返回
6.
DECLARE_DISPATCH_MAP
//此间定义函数,用于html发消息给,dlg,而dlg处理后再发消息给html.
对于对话框的处理:
1.去掉border 设置border 值为none
2.窗口移动:(因为窗口移动与combo-box消息冲突的问题,搞到晚上11点,主要是没找到问题根源)
两种方式添加消息函数
第一种:以代码的方式
1)在BEGIN_MESSAGE_MAP(CSingleDlg, CDHtmlDialog)中添加
ON_WM_MOUSEACTIVATE()
2)在头文件中添加
afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
3) 在cpp文件中实现
int CSingleDlg::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
PostMessage(WM_SYSCOMMAND, 0xF012, 0);//此种方法切实可行
return CDHtmlDialog::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
第二种:利用mfc方式(添加类向导)
1)右击dlg,选择添加类向导
2)点消息,搜索MouseActivate
3)确定,然后在.cpp中实现。
//与标准mfc无任何差别。。。。
3.dlg禁用消息
.h文件
// 屏蔽掉网页弹出的ActiveX安全警告对话框。
virtual BOOL IsExternalDispatchSafe() { return TRUE; }
virtual BOOL CanAccessExternal();
// 屏蔽右击菜单
virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved);
// 拦截一些系统快捷键
STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID);
.cpp文件(实现 )
// CDhtmDlg 消息处理程序
BOOL CSingleDlg::CanAccessExternal()
{
return TRUE;
}
HRESULT STDMETHODCALLTYPE CSingleDlg::ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved)
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE CSingleDlg::TranslateAccelerator(LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID)
{
if (lpMsg && lpMsg->message == WM_KEYDOWN)
{
bool bCtrl = (0x80 == (0x80 & GetKeyState(VK_CONTROL)));
// prevent Ctrl+N
if (lpMsg->wParam == 'N' && bCtrl)
{
return S_OK;
}
// prevent Ctrl+F
if (lpMsg->wParam == 'F' && bCtrl)
{
return S_OK;
}
// prevent F5
if (lpMsg->wParam == VK_F5)
{
return S_OK;
}
// prevent ESC
if (lpMsg->wParam == VK_ESCAPE)
{
return S_OK;
}
// prevent ENTER
if (lpMsg->wParam == VK_RETURN)
{
return S_OK;
}
}
return CDHtmlDialog::TranslateAccelerator(lpMsg, pguidCmdGroup, nCmdID);
}
4.禁用ctrl+鼠标滚动(dlg上的网页界面大小变化)
.h 中
virtual BOOL PreTranslateMessage(MSG* pMsg);
.cpp中
BOOL CSingleDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (LOWORD(pMsg->wParam) == MK_CONTROL && pMsg->message == WM_MOUSEWHEEL)
{
return true;
}
return CDHtmlDialog::PreTranslateMessage(pMsg);
}
对话框与HTML消息交互:
1.
BEGIN_DISPATCH_MAP(CSingleDlg, CDHtmlDialog)
DISP_FUNCTION(CSingleDlg, "starts", OnButtonRun, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()
//这里以启动按键为例
void CSingleDlg::OnButtonRun()
{
IHTMLDocument2* pDoc = NULL;
CDHtmlDialog::GetDHtmlDocument(&pDoc);
DISPPARAMS param = { 0 };
VARIANT vtRet;
OnBnClickedBtnRun2();
if (m_dRunFlg == 1)
{
vtRet.bVal = TRUE;
CBcTools::CallJSFunction(pDoc, _T("OnButtonRun"), param, &vtRet, NULL, NULL);//OnButtonRun 为javascript里的函数,界面上的一些动作放在此函数中。
}
}
HRESULT CBcTools::CallJSFunction(IHTMLDocument2* pDoc2,
CString strFunctionName,
DISPPARAMS dispParams,
VARIANT* varResult,
EXCEPINFO* exceptInfo,
UINT* nArgErr)
{
IDispatch *pDispScript = NULL;
HRESULT hResult;
hResult = pDoc2->get_Script(&pDispScript);
if (FAILED(hResult))
{
return S_FALSE;
}
DISPID dispid;
CComBSTR objbstrValue = strFunctionName;
BSTR bstrValue = objbstrValue.Copy();
OLECHAR *pszFunct = bstrValue;
hResult = pDispScript->GetIDsOfNames(IID_NULL,
&pszFunct,
1,
LOCALE_SYSTEM_DEFAULT,
&dispid);
if (FAILED(hResult))
{
pDispScript->Release();
return hResult;
}
varResult->vt = VT_VARIANT;
hResult = pDispScript->Invoke(dispid,
IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
&dispParams,
varResult,
exceptInfo,
nArgErr);
pDispScript->Release();
return hResult;
}
对话框上各控件的文字处理,背景处理 此方面的事情与普通dialog一致,这里不再说明。
dlg为dialog
与普通对话框的区别
1.类的继承关系
class CSingleDlg : public CDHtmlDialog
2.资源枚举
enum {
IDD = IDD_DLG_Single, IDH = IDR_HTML_SINGLE};
3.构造函数
CSingleDlg::CSingleDlg(CWnd* pParent /*=NULL*/)
: CDHtmlDialog(IDD_DLG_Single, IDR_HTML_SINGLE, pParent)
{
EnableAutomation();//此句不能少,少了dlg上的按件会无响应
}
4.rc资源
IDR_HTML_TESTHTMLDIALOG_DIALOG HTML "TestHtmlDialog.htm"
5-6做dlg与html交互用
5.event 动作
DECLARE_DHTML_EVENT_MAP()
//此间定义函数用于html发消息给,dlg,而dlg处理后不需返回
6.
DECLARE_DISPATCH_MAP
//此间定义函数,用于html发消息给,dlg,而dlg处理后再发消息给html.
对于对话框的处理:
1.去掉border 设置border 值为none
2.窗口移动:(因为窗口移动与combo-box消息冲突的问题,搞到晚上11点,主要是没找到问题根源)
两种方式添加消息函数
第一种:以代码的方式
1)在BEGIN_MESSAGE_MAP(CSingleDlg, CDHtmlDialog)中添加
ON_WM_MOUSEACTIVATE()
2)在头文件中添加
afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
3) 在cpp文件中实现
int CSingleDlg::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
PostMessage(WM_SYSCOMMAND, 0xF012, 0);//此种方法切实可行
return CDHtmlDialog::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
第二种:利用mfc方式(添加类向导)
1)右击dlg,选择添加类向导
2)点消息,搜索MouseActivate
3)确定,然后在.cpp中实现。
//与标准mfc无任何差别。。。。
3.dlg禁用消息
.h文件
// 屏蔽掉网页弹出的ActiveX安全警告对话框。
virtual BOOL IsExternalDispatchSafe() { return TRUE; }
virtual BOOL CanAccessExternal();
// 屏蔽右击菜单
virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved);
// 拦截一些系统快捷键
STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID);
.cpp文件(实现 )
// CDhtmDlg 消息处理程序
BOOL CSingleDlg::CanAccessExternal()
{
return TRUE;
}
HRESULT STDMETHODCALLTYPE CSingleDlg::ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved)
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE CSingleDlg::TranslateAccelerator(LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID)
{
if (lpMsg && lpMsg->message == WM_KEYDOWN)
{
bool bCtrl = (0x80 == (0x80 & GetKeyState(VK_CONTROL)));
// prevent Ctrl+N
if (lpMsg->wParam == 'N' && bCtrl)
{
return S_OK;
}
// prevent Ctrl+F
if (lpMsg->wParam == 'F' && bCtrl)
{
return S_OK;
}
// prevent F5
if (lpMsg->wParam == VK_F5)
{
return S_OK;
}
// prevent ESC
if (lpMsg->wParam == VK_ESCAPE)
{
return S_OK;
}
// prevent ENTER
if (lpMsg->wParam == VK_RETURN)
{
return S_OK;
}
}
return CDHtmlDialog::TranslateAccelerator(lpMsg, pguidCmdGroup, nCmdID);
}
4.禁用ctrl+鼠标滚动(dlg上的网页界面大小变化)
.h 中
virtual BOOL PreTranslateMessage(MSG* pMsg);
.cpp中
BOOL CSingleDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (LOWORD(pMsg->wParam) == MK_CONTROL && pMsg->message == WM_MOUSEWHEEL)
{
return true;
}
return CDHtmlDialog::PreTranslateMessage(pMsg);
}
对话框与HTML消息交互:
1.
BEGIN_DISPATCH_MAP(CSingleDlg, CDHtmlDialog)
DISP_FUNCTION(CSingleDlg, "starts", OnButtonRun, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()
//这里以启动按键为例
void CSingleDlg::OnButtonRun()
{
IHTMLDocument2* pDoc = NULL;
CDHtmlDialog::GetDHtmlDocument(&pDoc);
DISPPARAMS param = { 0 };
VARIANT vtRet;
OnBnClickedBtnRun2();
if (m_dRunFlg == 1)
{
vtRet.bVal = TRUE;
CBcTools::CallJSFunction(pDoc, _T("OnButtonRun"), param, &vtRet, NULL, NULL);//OnButtonRun 为javascript里的函数,界面上的一些动作放在此函数中。
}
}
HRESULT CBcTools::CallJSFunction(IHTMLDocument2* pDoc2,
CString strFunctionName,
DISPPARAMS dispParams,
VARIANT* varResult,
EXCEPINFO* exceptInfo,
UINT* nArgErr)
{
IDispatch *pDispScript = NULL;
HRESULT hResult;
hResult = pDoc2->get_Script(&pDispScript);
if (FAILED(hResult))
{
return S_FALSE;
}
DISPID dispid;
CComBSTR objbstrValue = strFunctionName;
BSTR bstrValue = objbstrValue.Copy();
OLECHAR *pszFunct = bstrValue;
hResult = pDispScript->GetIDsOfNames(IID_NULL,
&pszFunct,
1,
LOCALE_SYSTEM_DEFAULT,
&dispid);
if (FAILED(hResult))
{
pDispScript->Release();
return hResult;
}
varResult->vt = VT_VARIANT;
hResult = pDispScript->Invoke(dispid,
IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
&dispParams,
varResult,
exceptInfo,
nArgErr);
pDispScript->Release();
return hResult;
}
对话框上各控件的文字处理,背景处理 此方面的事情与普通dialog一致,这里不再说明。
阅读全文
0 0
- DHTMLDLG 界面制作
- 如何制作启动界面
- 制作启动界面
- UI-界面制作体会
- 欢迎界面的制作
- C#制作欢迎界面
- 软件界面制作途径
- 学习vc制作界面
- 制作欢迎界面
- C#制作欢迎界面
- 界面制作模仿
- 制作核心界面
- 启动界面的制作
- Android 引导界面制作
- Qt 制作自定义界面
- CF 登录界面制作
- Android制作启动界面
- QT 登录界面制作
- 吴恩达 深度学习 1-3 课后作业 Planar data classification with one hidden layer
- 线结构的提取
- 创建表的语句,以及插入数据(存储过程)
- HTML之初见
- 欢迎使用CSDN-markdown编辑器
- DHTMLDLG 界面制作
- CentOS7下安装jdk
- scrollview嵌套recyclerview
- Android之TabLayout+ViewPager+Fragment实现标题栏与页面联动
- offfice密钥
- dijkstra ,floyd
- .a和.so的区别
- C++ 内联函数
- Servlet中乱码的问题