Osadzanie powierzchnii roboczej excela w VS

0

Witam!

Mam pytanie: czy można osadzić powierzchnię roboczą excela we własnej aplikacji?

0

Poniższy program tworzy Microsoft Office Spreadsheet 11.0, domyślny interface excela:

#include <ole2.h>
#define _ATL_DLL
#define _ATL_DLL_IMPL
#include <atl\\atldef.h>
#include <atl\\atliface.h>
// linkujemy do atl.dll
#pragma comment(lib, "atl.lib")

LRESULT CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE _hinstance;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE,PSTR, int)
{
	_hinstance = hInstance;

	HWND hwnd = CreateWindow(TEXT("#32770"),
		TEXT("Microsoft Office Spreadsheet 11.0"),
		WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_VISIBLE,
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, 0,0, _hinstance, 0);

	SetWindowLong(hwnd, GWL_WNDPROC, (LONG)DlgProc);
	SendMessage(hwnd, WM_CREATE, 0, 0);

	MSG msg;
	while (GetMessage(&msg, 0, 0, 0))
	{
		TranslateMessage(&msg) ;
		DispatchMessage(&msg) ;
	}
	return 0;
}


LRESULT CALLBACK DlgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	static HWND hwndAtl;
	RECT rc;

	switch (uMsg)
	{
	case WM_CREATE:
		AtlAxWinInit();
		GetClientRect(hwnd, &rc);

		hwndAtl = CreateWindow(TEXT("AtlAxWin"),
			TEXT("{0002E559-0000-0000-C000-000000000046}"),
			WS_CHILD | WS_VISIBLE, 0, 0, rc.right, rc.bottom, hwnd, 0, _hinstance, 0);

		break;

	case WM_SIZE:
		MoveWindow(hwndAtl, 0, 0, LOWORD(lParam), HIWORD(lParam), true);
		break;

	case WM_CLOSE:
		DestroyWindow(hwnd);
		PostQuitMessage(0);
		break;

	default:
		return DefDlgProc(hwnd, uMsg, wParam, lParam);
	}
	return true;
}
0

Okazuje się, że w VS wystarczy otworzyć plik excela w Webbrowserze. Trzeba tylko (VS 2008 + IE7) dopisać do rejestru takie coś:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8]
"BrowserFlags"=dword:80000024

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.RTF.8]
"BrowserFlags"=dword:80000024

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.12]
"BrowserFlags"=dword:80000024

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.DocumentMacroEnabled.12]
"BrowserFlags"=dword:80000024

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.8]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetMacroEnabled.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SheetBinaryMacroEnabled.12]
"BrowserFlags"=dword:80000A00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.Show.8]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.Show.12]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.ShowMacroEnabled.12]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShow.8]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShow.12]
"BrowserFlags"=dword:800000A0

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PowerPoint.SlideShowMacroEnabled.12]
"BrowserFlags"=dword:800000A0

Może komuś się ten sposób przyda ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1