#include "stdafx.h" /* 显示网页的最简单的办法. 再复杂一点的是调用接口。 这个还有更多的属性去开发,如:查看源代码。 其实只有一个SYSLINK可用那个控件。 更多功能和优缺点有待深入。 本文修改自MSDN。 更加详细的是:ShowHTMLDialog Sample Source Page, 地址是:http://www.microsoft.com/en-us/download/details.aspx?id=944 名字是:htmldlg.exe,可解压释放。 这个好像显示的是本地的(PE文件的一个资源)自己的网页。还可以获取选择/操作的结果。 更多的类似的函数还有: ShowHTMLDialogEx ShowModelessHTMLDialog made by correy made at 2014.07.22 homepage:http://correy.webs.com */ #include <windows.h> #include <urlmon.h> #include <mshtmhst.h> #pragma comment (lib,"Urlmon.lib") void wmain(void) { HINSTANCE hinstMSHTML = LoadLibrary(TEXT("MSHTML.DLL")); if (hinstMSHTML == NULL) { return;// Error loading module -- fail as securely as possible } SHOWHTMLDIALOGFN* pfnShowHTMLDialog; pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(hinstMSHTML, "ShowHTMLDialog"); if (pfnShowHTMLDialog) { IMoniker *pURLMoniker; BSTR bstrURL = SysAllocString(L"http://correy.webs.com"); CreateURLMoniker(NULL, bstrURL, &pURLMoniker); if (pURLMoniker) { (*pfnShowHTMLDialog)(NULL, pURLMoniker, NULL, NULL, NULL); pURLMoniker->Release(); } SysFreeString(bstrURL); } FreeLibrary(hinstMSHTML); //以下也是摘自MSDN。 //IHostDialogHelper* pHDH; //IMoniker* pUrlMoniker; //BSTR bstrOptions = SysAllocString(L"dialogHeight:30;dialogWidth:40"); //BSTR bstrPath = SysAllocString(L"c:\\dummy.htm");//c:\\dummy.htm http://correy.webs.com //CreateURLMoniker(NULL, bstrPath, &pUrlMoniker); //CoCreateInstance(CLSID_HostDialogHelper, NULL, CLSCTX_INPROC, IID_IHostDialogHelper, (void**)&pHDH); //pHDH->ShowHTMLDialog(NULL, pUrlMoniker, NULL, bstrOptions, NULL, NULL);//pHDH == 0 //SysFreeString(bstrPath); //SysFreeString(bstrOptions); //pUrlMoniker->Release(); //pHDH->Release(); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "stdafx.h" /* 改进版的如下: 在自己的窗口中显示一个网页(其实不是的,还得用接口)。 made by correy made at 2014.07.23 homepage:http://correy.webs.com */ #include <windows.h> #include <urlmon.h> #include <mshtmhst.h> #pragma comment (lib,"Urlmon.lib") #pragma comment(linker, "/ENTRY:Entry") #pragma comment(linker, "/subsystem:windows") void show_my_website(HWND hWnd) { HINSTANCE hinstMSHTML = LoadLibrary(TEXT("MSHTML.DLL")); if (hinstMSHTML == NULL) { return;// Error loading module -- fail as securely as possible } SHOWHTMLDIALOGFN* pfnShowHTMLDialog; pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(hinstMSHTML, "ShowHTMLDialog"); if (pfnShowHTMLDialog) { IMoniker *pURLMoniker; BSTR bstrURL = SysAllocString(L"http://correy.webs.com"); CreateURLMoniker(NULL, bstrURL, &pURLMoniker); if (pURLMoniker) { (*pfnShowHTMLDialog)(hWnd, pURLMoniker, NULL, NULL, NULL); pURLMoniker->Release(); } SysFreeString(bstrURL); } FreeLibrary(hinstMSHTML); } LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE://可以考虑刷新的消息。 show_my_website(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return(DefWindowProc(hWnd, uMsg, wParam, lParam)); } return(0); } void Entry() { WNDCLASSEX sWndClassEx = {48,3,WindowProc,0,0,GetModuleHandle(0),0,LoadCursor(0,IDC_ARROW),(HBRUSH)6,0,L"correy",0}; ATOM a = RegisterClassEx(&sWndClassEx); ShowWindow(CreateWindowEx(0,L"correy",L"correy",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,0,0, GetModuleHandle(0),0),1); MSG sMsg; while (GetMessage(&sMsg, NULL, 0, 0)) { DispatchMessage(&sMsg); } ExitProcess(0); }
2014年7月22日星期二
最简单的显示网页的办法
订阅:
博文评论 (Atom)
没有评论:
发表评论