// HtmlViewDlg.cpp : 实现文件
//#include "stdafx.h"
#include "HtmlView.h"
#include "HtmlViewDlg.h"
#include <commctrl.h>
#include <Htmlctrl.h>
#include <gx.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CHtmlViewDlg 对话框CHtmlViewDlg::CHtmlViewDlg(CWnd* pParent /*=NULL*/)
: CDialog(CHtmlViewDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CHtmlViewDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CHtmlViewDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
ON_COMMAND(ID_BUTTON_LAST, OnMoveLast)
ON_COMMAND(ID_BUTTON_NEXT, OnMoveNext)
ON_COMMAND(ID_BUTTON_HOME, OnMoveHome)
END_MESSAGE_MAP()
// CHtmlViewDlg 消息处理程序
BOOL CHtmlViewDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
GXOpenDisplay(m_hWnd, 0);
m_hWndHtml = NULL;
//ln 0827
hInst=theApp.m_hInstance; //注册一个消息
MyRegisterClass(hInst, L"HAHA");
if (TRUE == InitHTMLControl(hInst))
{
// create the window for the control
CRect rect;
GetClientRect(&rect);
// ScreenToClient(&rect); m_hWndHtml = CreateWindow(TEXT("DISPLAYCLASS"), NULL, WS_VISIBLE|WS_CHILD|WS_BORDER,
rect.left, rect.top, rect.right, rect.bottom-20, m_hWnd, NULL, hInst, NULL);
::SetWindowLong(m_hWndHtml, GWL_EXSTYLE, WS_EX_TOPMOST);
::ShowWindow(m_hWndHtml, SW_SHOW);
::UpdateWindow(m_hWndHtml);
}
//
//根据这个给出的路径打开html文件
CString strFileURL=L"file://\\Storage Card\\math.html";
OpenHtmlFile(strFileURL);
//#define IDS_START_PAGE TEXT("file://\\Storage Card\\math.html")
//
// // load the start page into the browser window
// CString startPage;
// //startPage.Format(L"file://%s/index.html", GetCurrentFilePath());
// ::SendMessage(m_hWndHtml, DTM_NAVIGATE, 0, (LPARAM)(LPTSTR)IDS_START_PAGE);
// //::SendMessage(m_hWndHtml, DTM_NAVIGATE, 0, (LPARAM)(LPTSTR)startPage.GetBuffer());
// startPage.ReleaseBuffer();
//// //设置工具栏
if (!m_wndCommandBar.Create(this) ||!m_wndCommandBar.LoadToolBar(IDR_MAINFRAME))
{ TRACE0("Failed to create toolbar\n"); return -1; }
m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle()|CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}CString CHtmlViewDlg::GetCurrentFilePath()
{
TCHAR filepath[MAX_PATH];
ZeroMemory(filepath,sizeof(filepath));
GetModuleFileName(GetModuleHandle (NULL), filepath, MAX_PATH);
int i=0 ;
for (i = wcslen(filepath); i && filepath[i] != L'\\'; i--)
;
filepath[i + 1] = L'\0';
CString retStr(filepath);
return retStr;
}#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CHtmlViewDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
DRA::RelayoutDialog(
AfxGetInstanceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_HTMLVIEW_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_HTMLVIEW_DIALOG));
}
#endifATOM CHtmlViewDlg::MyRegisterClass( HINSTANCE hInstance, LPTSTR szWindowClass ){
WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
//wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_BROWSE));
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass; return RegisterClass(&wc);}void CHtmlViewDlg::OnMoveLast()
{}
void CHtmlViewDlg::OnMoveNext()
{}
void CHtmlViewDlg::OnMoveHome()
{}void CHtmlViewDlg::OpenHtmlFile(CString strURL)
{
::SendMessage(m_hWndHtml, DTM_NAVIGATE, 0, (LPARAM)(LPTSTR)strURL.GetBuffer());
}//回调函数
LRESULT CALLBACK CHtmlViewDlg::WndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{ WCHAR wszURL[1000];
HWND hWndHtml; switch (Msg)
{
case WM_NOTIFY:
{
NM_HTMLVIEW* pnmHTMLView = (NM_HTMLVIEW*)lParam; switch (pnmHTMLView->hdr.code)
{
case NM_HOTSPOT:
mbstowcs(wszURL, (const char *)pnmHTMLView->szTarget, 1000); break;
} return FALSE;
}
//default:
// return DefWindowProc(hWnd, Msg, wParam, lParam);
}
return 0;}
这是我的一个对话框的类,这个类用于打开一个html文件,我想捕捉到点击网页中超链接这个消息,所以查阅资料创建了这个WindowProc()消息,但是我运行起来点击窗口中链接的时候并没有运行到WndProc()这个我设置的回调函数中去。我想应该是我的这个消息设置不正确,所以想请高手指点!多谢多谢拉!红色部分是我设置这个消息的关键部分,高手可以看看是不是这里有问题。
//#include "stdafx.h"
#include "HtmlView.h"
#include "HtmlViewDlg.h"
#include <commctrl.h>
#include <Htmlctrl.h>
#include <gx.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CHtmlViewDlg 对话框CHtmlViewDlg::CHtmlViewDlg(CWnd* pParent /*=NULL*/)
: CDialog(CHtmlViewDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CHtmlViewDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CHtmlViewDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
ON_COMMAND(ID_BUTTON_LAST, OnMoveLast)
ON_COMMAND(ID_BUTTON_NEXT, OnMoveNext)
ON_COMMAND(ID_BUTTON_HOME, OnMoveHome)
END_MESSAGE_MAP()
// CHtmlViewDlg 消息处理程序
BOOL CHtmlViewDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
GXOpenDisplay(m_hWnd, 0);
m_hWndHtml = NULL;
//ln 0827
hInst=theApp.m_hInstance; //注册一个消息
MyRegisterClass(hInst, L"HAHA");
if (TRUE == InitHTMLControl(hInst))
{
// create the window for the control
CRect rect;
GetClientRect(&rect);
// ScreenToClient(&rect); m_hWndHtml = CreateWindow(TEXT("DISPLAYCLASS"), NULL, WS_VISIBLE|WS_CHILD|WS_BORDER,
rect.left, rect.top, rect.right, rect.bottom-20, m_hWnd, NULL, hInst, NULL);
::SetWindowLong(m_hWndHtml, GWL_EXSTYLE, WS_EX_TOPMOST);
::ShowWindow(m_hWndHtml, SW_SHOW);
::UpdateWindow(m_hWndHtml);
}
//
//根据这个给出的路径打开html文件
CString strFileURL=L"file://\\Storage Card\\math.html";
OpenHtmlFile(strFileURL);
//#define IDS_START_PAGE TEXT("file://\\Storage Card\\math.html")
//
// // load the start page into the browser window
// CString startPage;
// //startPage.Format(L"file://%s/index.html", GetCurrentFilePath());
// ::SendMessage(m_hWndHtml, DTM_NAVIGATE, 0, (LPARAM)(LPTSTR)IDS_START_PAGE);
// //::SendMessage(m_hWndHtml, DTM_NAVIGATE, 0, (LPARAM)(LPTSTR)startPage.GetBuffer());
// startPage.ReleaseBuffer();
//// //设置工具栏
if (!m_wndCommandBar.Create(this) ||!m_wndCommandBar.LoadToolBar(IDR_MAINFRAME))
{ TRACE0("Failed to create toolbar\n"); return -1; }
m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle()|CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}CString CHtmlViewDlg::GetCurrentFilePath()
{
TCHAR filepath[MAX_PATH];
ZeroMemory(filepath,sizeof(filepath));
GetModuleFileName(GetModuleHandle (NULL), filepath, MAX_PATH);
int i=0 ;
for (i = wcslen(filepath); i && filepath[i] != L'\\'; i--)
;
filepath[i + 1] = L'\0';
CString retStr(filepath);
return retStr;
}#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CHtmlViewDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
DRA::RelayoutDialog(
AfxGetInstanceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_HTMLVIEW_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_HTMLVIEW_DIALOG));
}
#endifATOM CHtmlViewDlg::MyRegisterClass( HINSTANCE hInstance, LPTSTR szWindowClass ){
WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
//wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_BROWSE));
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass; return RegisterClass(&wc);}void CHtmlViewDlg::OnMoveLast()
{}
void CHtmlViewDlg::OnMoveNext()
{}
void CHtmlViewDlg::OnMoveHome()
{}void CHtmlViewDlg::OpenHtmlFile(CString strURL)
{
::SendMessage(m_hWndHtml, DTM_NAVIGATE, 0, (LPARAM)(LPTSTR)strURL.GetBuffer());
}//回调函数
LRESULT CALLBACK CHtmlViewDlg::WndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{ WCHAR wszURL[1000];
HWND hWndHtml; switch (Msg)
{
case WM_NOTIFY:
{
NM_HTMLVIEW* pnmHTMLView = (NM_HTMLVIEW*)lParam; switch (pnmHTMLView->hdr.code)
{
case NM_HOTSPOT:
mbstowcs(wszURL, (const char *)pnmHTMLView->szTarget, 1000); break;
} return FALSE;
}
//default:
// return DefWindowProc(hWnd, Msg, wParam, lParam);
}
return 0;}
这是我的一个对话框的类,这个类用于打开一个html文件,我想捕捉到点击网页中超链接这个消息,所以查阅资料创建了这个WindowProc()消息,但是我运行起来点击窗口中链接的时候并没有运行到WndProc()这个我设置的回调函数中去。我想应该是我的这个消息设置不正确,所以想请高手指点!多谢多谢拉!红色部分是我设置这个消息的关键部分,高手可以看看是不是这里有问题。
解决方案 »
- vc如何用ado提取access中某一列的数据进行图像曲线绘制
- unicode环境下,CString 的format方法为什么处理不了char型中文字符串??
- 无法显示菜单位图
- 如何在WinProc()中截取键盘消息?如方向键.
- 又张了一个角,回馈散分
- 怎样将些好的CLASS 封装成 DLL 和 LIB
- 谁有音频聊天的源码!
- 我看过一些高手写的一些文章,其中不少说到如何查找一个函数实现自已要的功能,这里我就不明白了,要如何找呢?在哪找呢?请各位指教!
- 在多线程中怎样给公用数据加锁?
- 急!请教关于图像处理的VC++实现的问题,万分感谢!
- paint小问题。但是胜造一级浮屠
- 多维动态数组间,数值的复制问题
LRESULT CHtmlViewDlg::WindowProc( UINT Msg, WPARAM wParam, LPARAM lParam)