показать окно веб-просмотра / веб-страницы в настольном приложении c ++ windows - PullRequest
0 голосов
/ 03 мая 2020

Я хочу отобразить всплывающее окно / уведомление в приложении c ++ windows. Уведомление будет отображать веб-страницу с нашего сайта. Я ищу что-то похожее на CEF, но родные API-интерфейсы ОС для отображения содержимого веб-просмотра. Может быть, есть какой-то класс, который я мог бы использовать с CreateWindowEx?

1 Ответ

0 голосов
/ 04 мая 2020
  1. Создать пустой проект C ++
  2. Создать диалог ресурсов. Щелкните правой кнопкой мыши диалоговое окно и добавьте элемент управления ActiveX-> Microsoft Web Browser. Измените его размер и переместитесь в нужное место. Измените идентификатор, чтобы его можно было идентифицировать в вашей программе enter image description here
  3. Добавить файл C ++ с похожим содержимым:
//#import 
#include <Windows.h>
#include <Ole2.h>
#include "resource.h"
#include <iostream>
#include <atlbase.h> //activex
#include <atlwin.h> //windows
#include <atlcom.h>

//This will load the browser dll then library and will generate headers
//All the declarations will be in the namespace SHDocVw
#import "shdocvw.dll"
using namespace std;

class CMyDialog : public CAxDialogImpl<CMyDialog>
{
public:
    enum { IDD = IDD_DIALOG_COM};

    BEGIN_MSG_MAP(CMyDialog)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnBnCancel)
        COMMAND_HANDLER(IDOK, BN_CLICKED, OnBnOk)
    END_MSG_MAP()
    CComPtr<SHDocVw::IWebBrowser2>  ctrl;
    LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        // Do some initialization code
        HRESULT hr;
        //IDC_EXPLORER_TEST is the ID of your control
        GetDlgControl(IDC_EXPLORER_TEST, __uuidof(ctrl), (void**)&ctrl);

        _variant_t address = L"google.com";
        //open a web page
        hr = ctrl->Navigate2(&address);

        LRESULT res = CAxDialogImpl<CMyDialog>::OnInitDialog(uMsg, wParam, lParam, bHandled);
        return 0;
    }
public:
    LRESULT OnBnCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
        EndDialog(IDCANCEL);
        return 0;
    }
    LRESULT OnBnOk(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
        EndDialog(IDOK);
        return 0;
    }
};
CComModule _Module;

int main()
{
    CMyDialog dlg;
    dlg.DoModal();

    return 0;
}

Также имеется Пограничный контроллер для Chromium Edge Контроллер WebView

...