Преглед на файлове

02_WelcomeScreen 和 03_ClearFill 功能: 点击图标开启工具箱窗口

蘭雅sRGB преди 8 месеца
родител
ревизия
51f19c6067
променени са 4 файла, в които са добавени 329 реда и са изтрити 0 реда
  1. 246 0
      04_ToolsBox/ToolsBox.cpp
  2. 24 0
      04_ToolsBox/ToolsBox.rc
  3. 52 0
      04_ToolsBox/lycpg64.cbp
  4. 7 0
      04_ToolsBox/resource.h

+ 246 - 0
04_ToolsBox/ToolsBox.cpp

@@ -0,0 +1,246 @@
+#include <windows.h>
+#include "resource.h"
+
+#import "VGCoreAuto.tlb" \
+			rename("GetCommandLine", "VGGetCommandLine") \
+			rename("CopyFile", "VGCore") \
+			rename("FindWindow", "VGFindWindow")
+
+
+static HINSTANCE g_hResource = NULL;
+
+BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+  if(fdwReason == DLL_PROCESS_ATTACH)
+  {
+    g_hResource = (HINSTANCE)hinstDLL;
+  }
+  return TRUE;
+}
+
+class ToolsBoxPlugin : public VGCore::IVGAppPlugin
+{
+private:
+  VGCore::IVGApplication *m_pApp;
+  volatile ULONG m_ulRefCount;
+  long m_lCookie;
+
+  static INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
+  void OpenToolsBox();
+
+public:
+  ToolsBoxPlugin();
+
+// IUnknown
+public:
+  STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject);
+  STDMETHOD_(ULONG, AddRef)(void) { return ++m_ulRefCount; }
+  STDMETHOD_(ULONG, Release)(void)
+  {
+    ULONG ulCount = --m_ulRefCount;
+    if(ulCount == 0)
+    {
+      delete this;
+    }
+    return ulCount;
+  }
+
+// IDispatch
+public:
+  STDMETHOD(GetTypeInfoCount)(UINT *pctinfo) { return E_NOTIMPL; }
+  STDMETHOD(GetTypeInfo)(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { return E_NOTIMPL; }
+  STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { return E_NOTIMPL; }
+  STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
+
+// IVGAppPlugin
+public:
+  STDMETHOD(raw_OnLoad)(VGCore::IVGApplication *Application);
+  STDMETHOD(raw_StartSession)();
+  STDMETHOD(raw_StopSession)();
+  STDMETHOD(raw_OnUnload)();
+
+};
+
+ToolsBoxPlugin::ToolsBoxPlugin()
+{
+  m_pApp = NULL;
+  m_lCookie = 0;
+  m_ulRefCount = 1;
+}
+
+STDMETHODIMP ToolsBoxPlugin::QueryInterface(REFIID riid, void **ppvObject)
+{
+  HRESULT hr = S_OK;
+  m_ulRefCount++;
+  if(riid == IID_IUnknown)
+  {
+    *ppvObject = (IUnknown *)this;
+  }
+  else if(riid == IID_IDispatch)
+  {
+    *ppvObject = (IDispatch *)this;
+  }
+  else if(riid == __uuidof(VGCore::IVGAppPlugin))
+  {
+    *ppvObject = (VGCore::IVGAppPlugin *)this;
+  }
+  else
+  {
+    m_ulRefCount--;
+    hr = E_NOINTERFACE;
+  }
+  return hr;
+}
+
+STDMETHODIMP ToolsBoxPlugin::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+  switch(dispIdMember)
+  {
+
+    case 0x0014: // DISPID_APP_ONPLUGINCMD
+      if(pDispParams != NULL && pDispParams->cArgs == 1)
+      {
+        _bstr_t strCmd(pDispParams->rgvarg[0].bstrVal);
+        if(strCmd == _bstr_t("OpenToolsBox"))
+        {
+       //   MessageBox(NULL, _bstr_t("OpenToolsBox"), _bstr_t("OpenToolsBox"), MB_ICONSTOP);
+          OpenToolsBox();
+        }
+      }
+      break;
+
+    case 0x0015: // DISPID_APP_ONPLUGINCMDSTATE
+      if(pDispParams != NULL && pDispParams->cArgs == 3)
+      {
+        _bstr_t strCmd(pDispParams->rgvarg[2].bstrVal);
+        if(strCmd == _bstr_t("OpenToolsBox"))
+        {
+          *pDispParams->rgvarg[1].pboolVal = VARIANT_TRUE;
+        }
+      }
+      break;
+  }
+  return S_OK;
+}
+
+STDMETHODIMP ToolsBoxPlugin::raw_OnLoad(VGCore::IVGApplication *Application)
+{
+  m_pApp = Application;
+  if(m_pApp)
+  {
+    m_pApp->AddRef();
+  }
+  return S_OK;
+}
+
+STDMETHODIMP ToolsBoxPlugin::raw_StartSession()
+{
+  try
+    {
+      m_pApp->AddPluginCommand(_bstr_t("OpenToolsBox"), _bstr_t("Tools Box"), _bstr_t("打开工具窗口"));
+
+      VGCore::ICUIControlPtr ctl = m_pApp->CommandBars->Item[_bstr_t("Standard")]->Controls->AddCustomButton(VGCore::cdrCmdCategoryPlugins, _bstr_t("OpenToolsBox"), 10 , VARIANT_FALSE);
+      ctl->SetIcon2(_bstr_t("guid://d2fdc0d9-09f8-4948-944c-4297395c05b7"));
+      m_lCookie = m_pApp->AdviseEvents(this);
+    }
+    catch(_com_error &e)
+    {
+      MessageBox(NULL, e.Description(), _bstr_t("Error"), MB_ICONSTOP);
+    }
+    return S_OK;
+}
+
+STDMETHODIMP ToolsBoxPlugin::raw_StopSession()
+{
+  try
+  {
+    m_pApp->UnadviseEvents(m_lCookie);
+    m_pApp->RemovePluginCommand(_bstr_t("OpenToolsBox"));
+  }
+  catch(_com_error &e)
+  {
+    MessageBox(NULL, e.Description(), _bstr_t("Error"), MB_ICONSTOP);
+  }
+  return S_OK;
+}
+
+STDMETHODIMP ToolsBoxPlugin::raw_OnUnload()
+{
+  if(m_pApp)
+  {
+    m_pApp->Release();
+    m_pApp = NULL;
+  }
+  return S_OK;
+}
+
+
+void ToolsBoxPlugin::OpenToolsBox()
+{
+ // MessageBox(NULL, _bstr_t("打开工具箱"), _bstr_t("打开工具箱"), MB_ICONSTOP);
+  try
+  {
+    m_pApp->StartupMode = VGCore::cdrStartupDoNothing;
+	// To avoid 64 bit portability warning, store the long handle value into an INT_PTR
+	// before casting it to HWND:
+
+	INT_PTR nHandle = m_pApp->AppWindow->Handle;
+	HWND hAppWnd = reinterpret_cast<HWND>(nHandle);
+    INT_PTR nRet = DialogBoxParam(g_hResource, MAKEINTRESOURCE(IDD_WELCOME), hAppWnd, DlgProc, (LPARAM)this);
+    switch(nRet)
+    {
+    case IDC_NEWDOC:
+      m_pApp->CreateDocument();
+      break;
+
+    case IDC_LASTDOC:
+      if(m_pApp->RecentFiles->Count > 0)
+      {
+        m_pApp->OpenDocument(m_pApp->RecentFiles->Item[1]->FullName, 0);
+      }
+      else
+      {
+        MessageBox(NULL, "No documents were editied yet.", "Error", MB_ICONSTOP);
+      }
+      break;
+    }
+  }
+  catch(_com_error &e)
+  {
+    MessageBox(NULL, e.Description(), "Error", MB_ICONSTOP);
+  }
+}
+
+
+INT_PTR CALLBACK ToolsBoxPlugin::DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+  if(uMsg == WM_COMMAND)
+  {
+    switch(LOWORD(wParam))
+    {
+      case IDC_NEWDOC:
+        EndDialog(hDlg, IDC_NEWDOC);
+        break;
+
+      case IDC_LASTDOC:
+        EndDialog(hDlg, IDC_LASTDOC);
+        break;
+
+      case IDOK:
+      case IDCANCEL:
+        EndDialog(hDlg, 0);
+        break;
+    }
+  }
+  else if(uMsg == WM_INITDIALOG)
+  {
+    return 1;
+  }
+  return 0;
+}
+
+extern "C" __declspec(dllexport) DWORD APIENTRY AttachPlugin(VGCore::IVGAppPlugin **ppIPlugin)
+{
+  *ppIPlugin = new ToolsBoxPlugin;
+  return 0x100;
+}

+ 24 - 0
04_ToolsBox/ToolsBox.rc

@@ -0,0 +1,24 @@
+// Generated by ResEdit 1.6.6
+// Copyright (C) 2006-2015
+// http://www.resedit.net
+
+#include <windows.h>
+#include <commctrl.h>
+#include <richedit.h>
+#include "resource.h"
+
+
+
+
+//
+// Dialog resources
+//
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+IDD_WELCOME DIALOGEX 0, 0, 172, 57
+STYLE DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU
+CAPTION "Tools Box"
+FONT 8, "MS Shell Dlg", 400, 0, 1
+{
+    PUSHBUTTON      "New Document", IDC_NEWDOC, 7, 7, 77, 42, 0, WS_EX_LEFT
+    PUSHBUTTON      "Last Document", IDC_LASTDOC, 88, 7, 77, 42, 0, WS_EX_LEFT
+}

+ 52 - 0
04_ToolsBox/lycpg64.cbp

@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_project_file>
+	<FileVersion major="1" minor="6" />
+	<Project>
+		<Option title="lycpg64" />
+		<Option pch_mode="2" />
+		<Option compiler="microsoft_visual_c_2022" />
+		<Build>
+			<Target title="Debug">
+				<Option output="bin/Debug/lycpg64" prefix_auto="1" extension_auto="1" />
+				<Option object_output="obj/Debug/" />
+				<Option type="3" />
+				<Option compiler="microsoft_visual_c_2022" />
+				<Option createDefFile="1" />
+				<Option createStaticLib="1" />
+				<Compiler>
+					<Add option="/Zi" />
+					<Add option="/D_DEBUG" />
+				</Compiler>
+				<Linker>
+					<Add option="/debug" />
+				</Linker>
+			</Target>
+			<Target title="Release">
+				<Option output="bin/Release/lycpg64" prefix_auto="1" extension_auto="1" />
+				<Option object_output="obj/Release/" />
+				<Option type="3" />
+				<Option compiler="microsoft_visual_c_2022" />
+				<Option createDefFile="1" />
+				<Option createStaticLib="1" />
+				<Compiler>
+					<Add option="/Ox" />
+					<Add option="/DNDEBUG" />
+					<Add directory="../TypeLibs" />
+				</Compiler>
+			</Target>
+		</Build>
+		<Compiler>
+			<Add option="/W3" />
+			<Add option="/EHsc" />
+		</Compiler>
+		<Unit filename="ToolsBox.cpp" />
+		<Unit filename="ToolsBox.rc">
+			<Option compilerVar="WINDRES" />
+			<Option target="Release" />
+		</Unit>
+		<Unit filename="resource.h" />
+		<Extensions>
+			<lib_finder disable_auto="1" />
+		</Extensions>
+	</Project>
+</CodeBlocks_project_file>

+ 7 - 0
04_ToolsBox/resource.h

@@ -0,0 +1,7 @@
+#ifndef IDC_STATIC
+#define IDC_STATIC (-1)
+#endif
+
+#define IDD_WELCOME                             9
+#define IDC_NEWDOC                              1001
+#define IDC_LASTDOC                             1002