/** * Program initialization. */ static int Init() { /* Load control cursors */ LoadControlCursors(); /* Register window classes */ if ( RegisterWindowClasses() == 0 ) { return 0; } /* Initialize common controls library */ InitCommonControlsEx( NULL); /* Initialize property list dll */ if ( InitPropertyListDll( GetModuleHandle(NULL)) == 0 ) { return 0; } /* Initialize TWC and creating main window */ if ( !twcInit() || !(twcCreateObject( &MainWnd, 1, HWND_DESKTOP)) ) { return 0; } hMainWnd = MainWnd.hwnd; /* Create property list */ if ( CreatePropList() == 0) { return 0; } /* Set status bar z-order(top) */ SetWindowPos( StatusBar.hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); /* Add toolbox and toolbar buttons */ AddToolboxButtons(Toolbox.hwnd); AddMainToolbarButtons(MainToolbar.hwnd); /* Show main window */ ShowWindow( hMainWnd, SW_SHOWMAXIMIZED); UpdateWindow( hMainWnd); twc_SetObjectsClientDataSize( sizeof( TWC_OBJECT_CLIENT_DATA)); actNewProject(); return 1; }
LRESULT CALLBACK MainWndProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { WNDPROC lpOldProc; PluginInfo *plugin; lpOldProc = (WNDPROC)GetProp( hDlg, "oldproc" ); plugin = GetPluginInfo(hDlg); if (plugin != NULL) { if (msg == plugin->nPurgeCacheMsg) { PGPclPurgeCachedPassphrase(wParam); return TRUE; } } switch(msg) { case WM_SETTINGCHANGE: case WM_PALETTECHANGED: case WM_FONTCHANGE: case WM_SYSCOLORCHANGE: { HIMAGELIST hilToolbar; int nIndex; LRESULT lResult; lResult = CommonWndProc(hDlg, msg, wParam, lParam); nIndex = SendMessage(plugin->hToolbar, TB_COMMANDTOINDEX, IDC_PGPKEYS, 0); SendMessage(plugin->hToolbar, TB_DELETEBUTTON, nIndex, 0); plugin->nPGPKeysButton = -1; hilToolbar = (HIMAGELIST) SendMessage(plugin->hToolbar, TB_GETIMAGELIST, 0, 0); ImageList_Remove(hilToolbar, plugin->nPGPKeysImage); AddMainToolbarButtons(plugin); return lResult; } case WM_DESTROY: { KillTimer(hDlg, WATCH_TOOLBAR_TIMER); break; } case WM_PARENTNOTIFY: if (LOWORD(wParam) == WM_CREATE) CreateMainWindowGUI(hDlg, plugin); break; case WM_TIMER: if (wParam == WATCH_TOOLBAR_TIMER) { int nState; nState = SendMessage(plugin->hToolbar, TB_GETSTATE, IDC_PGPKEYS, 0); if (nState & TBSTATE_ENABLED) return 0; nState |= TBSTATE_ENABLED; SendMessage(plugin->hToolbar, TB_SETSTATE, IDC_PGPKEYS, MAKELONG(nState, 0)); return 0; } break; case WM_INITMENUPOPUP: { int nOptions; MENUITEMINFO menuInfo; char szOptions[256]; char szMenu[256]; LRESULT lResult; // For some reason, the old window proc disables the // menu items in the PGP popup menu. We'll enable // the items after the old proc disables them if ((HMENU) wParam == plugin->hPGPMenu) { lResult = CallWindowProc(lpOldProc, hDlg, msg, wParam, lParam); EnableMenuItem(plugin->hPGPMenu, IDC_PREFS, MF_BYCOMMAND | MF_ENABLED); EnableMenuItem(plugin->hPGPMenu, IDC_PGPKEYS, MF_BYCOMMAND | MF_ENABLED); return lResult; } else if (plugin->bOE5) { UIGetString(szOptions, 254, IDS_MENU_OEOPTIONS); nOptions = GetMenuItemCount((HMENU) wParam); menuInfo.cbSize = sizeof(MENUITEMINFO); menuInfo.fMask = MIIM_TYPE | MIIM_SUBMENU | MIIM_ID; menuInfo.dwTypeData = szMenu; menuInfo.cch = 255; GetMenuItemInfo((HMENU) wParam, nOptions - 1, TRUE, &menuInfo); if (!strcmp(szMenu, szOptions)) { lResult = CallWindowProc(lpOldProc, hDlg, msg, wParam, lParam); strcpy(szMenu, "&PGP"); menuInfo.cbSize = sizeof(MENUITEMINFO); menuInfo.fMask = MIIM_TYPE | MIIM_ID | MIIM_SUBMENU | MIIM_STATE; menuInfo.fType = MFT_STRING; menuInfo.fState = MFS_ENABLED; menuInfo.wID = IDC_PGPMENU; menuInfo.hSubMenu = plugin->hPGPMenu; menuInfo.dwTypeData = szMenu; InsertMenuItem((HMENU) wParam, nOptions, TRUE, &menuInfo); plugin->nPGPPosition = nOptions; return lResult; } else if (!strcmp(szMenu, "&PGP")) { lResult = CallWindowProc(lpOldProc, hDlg, msg, wParam, lParam); DestroyMenu(plugin->hPGPMenu); plugin->hPGPMenu = CreatePopupMenu(); UIGetString(szMenu, 254, IDS_MENU_PREFS); AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PREFS, szMenu); UIGetString(szMenu, 254, IDS_MENU_PGPKEYS); AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PGPKEYS, szMenu); menuInfo.cbSize = sizeof(MENUITEMINFO); menuInfo.fMask = MIIM_SUBMENU | MIIM_STATE; menuInfo.fState = MFS_ENABLED; menuInfo.hSubMenu = plugin->hPGPMenu; SetMenuItemInfo((HMENU) wParam, IDC_PGPMENU, FALSE, &menuInfo); menuInfo.fMask = MIIM_STATE; SetMenuItemInfo(plugin->hPGPMenu, IDC_PREFS, FALSE, &menuInfo); SetMenuItemInfo(plugin->hPGPMenu, IDC_PGPKEYS, FALSE, &menuInfo); return lResult; } } break; } } return CommonWndProc(hDlg, msg, wParam, lParam); }
static LRESULT CALLBACK ToolbarParentWndProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { WNDPROC lpOldProc; PluginInfo *plugin; LPNMHDR lpnm; LPNMTOOLBAR lptb; lpOldProc = (WNDPROC)GetProp( hDlg, "oldproc" ); plugin = GetPluginInfo(hDlg); lpnm = (LPNMHDR) lParam; lptb = (LPNMTOOLBAR) lParam; switch(msg) { case WM_NOTIFY: { int nIndex; if (lpnm->code == TBN_BEGINADJUST) { nIndex = SendMessage(plugin->hToolbar, TB_COMMANDTOINDEX, IDC_PGPKEYS, 0); SendMessage(plugin->hToolbar, TB_DELETEBUTTON, nIndex, 0); plugin->nPGPKeysButton = -1; } if (lpnm->code == TBN_ENDADJUST) { TBBUTTON tbb[1]; HIMAGELIST hilToolbar; int nX; int nY; LRESULT lResult; lResult = CallWindowProc(lpOldProc, hDlg, msg, wParam, lParam); hilToolbar = (HIMAGELIST) SendMessage(plugin->hToolbar, TB_GETIMAGELIST, 0, 0); ImageList_GetIconSize(hilToolbar, &nX, &nY); if ((nX < 20) && !(plugin->bSmallIcons)) AddMainToolbarButtons(plugin); else if ((nX > 20) && plugin->bSmallIcons) AddMainToolbarButtons(plugin); else { tbb[0].iBitmap = plugin->nPGPKeysImage; tbb[0].idCommand = IDC_PGPKEYS; tbb[0].fsState = TBSTATE_ENABLED; tbb[0].fsStyle = TBSTYLE_BUTTON; tbb[0].dwData = 0; tbb[0].iString = plugin->nPGPKeysString; SendMessage(plugin->hToolbar, TB_ADDBUTTONS, 1, (LPARAM) &tbb); plugin->nPGPKeysButton = SendMessage(plugin->hToolbar, TB_COMMANDTOINDEX, IDC_PGPKEYS, 0); } return lResult; } break; } } return CallWindowProc(lpOldProc, hDlg, msg, wParam, lParam); }
void CreateMainWindowGUI(HWND hDlg, PluginInfo *plugin) { HWND hReBar; HWND hSizableRebar; int nIndex; MENUITEMINFO menuInfo; WNDPROC lpOldProc; char szText[255]; hSizableRebar = FindWindowEx(hDlg, NULL, "SizableRebar", NULL); hReBar = FindWindowEx(hSizableRebar, NULL, "ReBarWindow32", NULL); if (plugin->bOE5) { plugin->hToolbar = FindWindowEx(hReBar, NULL, "ToolbarWindow32", NULL); plugin->hMenuToolbar = FindWindowEx(hReBar, plugin->hToolbar, "ToolbarWindow32", NULL); if (!plugin->hMenuToolbar || !plugin->hToolbar) return; } else { plugin->hMainMenu = GetMenu(hDlg); plugin->hToolbar = FindWindowEx(hReBar, NULL, "ToolbarWindow32", NULL); if (!plugin->hMainMenu || !plugin->hToolbar) return; } if (plugin->bOE5) { if (plugin->hPGPMenu != NULL) DestroyMenu(plugin->hPGPMenu); plugin->hPGPMenu = CreatePopupMenu(); UIGetString(szText, 254, IDS_MENU_PREFS); AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PREFS, szText); UIGetString(szText, 254, IDS_MENU_PGPKEYS); AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PGPKEYS, szText); } else { menuInfo.cbSize = sizeof(MENUITEMINFO); menuInfo.fMask = MIIM_SUBMENU; GetMenuItemInfo(plugin->hMainMenu, 4, TRUE, &menuInfo); if (menuInfo.hSubMenu != plugin->hPGPMenu) { if (plugin->hPGPMenu != NULL) DestroyMenu(plugin->hPGPMenu); plugin->hPGPMenu = CreatePopupMenu(); plugin->nPGPPosition = 4; InsertMenu(plugin->hMainMenu, plugin->nPGPPosition, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT) plugin->hPGPMenu, "&PGP"); UIGetString(szText, 254, IDS_MENU_PREFS); AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PREFS, szText); UIGetString(szText, 254, IDS_MENU_PGPKEYS); AppendMenu(plugin->hPGPMenu, MF_STRING, IDC_PGPKEYS, szText); DrawMenuBar(hDlg); } } SendMessage(plugin->hToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0); nIndex = SendMessage(plugin->hToolbar, TB_COMMANDTOINDEX, IDC_PGPKEYS, 0); if (nIndex < 0) { AddMainToolbarButtons(plugin); SetTimer(hDlg, WATCH_TOOLBAR_TIMER, 500, NULL); } // Look for status bar plugin->hStatusBar = FindWindowEx(hDlg, NULL, "msctls_statusbar32", NULL); lpOldProc = (WNDPROC) GetProp(hReBar, "oldproc"); if (lpOldProc == NULL) { // Save away toolbar parent window proc SetProp(hReBar, "oldproc", (HANDLE) GetWindowLong(hReBar, GWL_WNDPROC)); // Save plugin pointer SetProp(hReBar, PLUGIN_INFO_PROP, (HANDLE) plugin); // Subclass toolbar parent window SetWindowLong(hReBar, GWL_WNDPROC, (DWORD) ToolbarParentWndProc); } return; }