HWND tcore::init_toolbar(HINSTANCE hinst, HWND hdlgP) { // Create a toolbar gdmgr._htb_core = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR)NULL, WS_CHILD | /*CCS_ADJUSTABLE |*/ TBSTYLE_TOOLTIPS | TBSTYLE_FLAT, 0, 0, 0, 0, hdlgP, (HMENU)IDR_WGENMENU, gdmgr._hinst, NULL); //Enable multiple image lists SendMessage(gdmgr._htb_core, CCM_SETVERSION, (WPARAM) 5, 0); // Send the TB_BUTTONSTRUCTSIZE message, which is required for backward compatibility ToolBar_ButtonStructSize(gdmgr._htb_core, sizeof(TBBUTTON)); gdmgr._tbBtns_core[0].iBitmap = MAKELONG(gdmgr._iico_save, 0); gdmgr._tbBtns_core[0].idCommand = IDM_SAVE; gdmgr._tbBtns_core[0].fsState = TBSTATE_ENABLED; gdmgr._tbBtns_core[0].fsStyle = BTNS_BUTTON; gdmgr._tbBtns_core[0].dwData = 0L; gdmgr._tbBtns_core[0].iString = -1; ToolBar_AddButtons(gdmgr._htb_core, 1, &gdmgr._tbBtns_core); ToolBar_AutoSize(gdmgr._htb_core); ToolBar_SetExtendedStyle(gdmgr._htb_core, TBSTYLE_EX_DRAWDDARROWS); ToolBar_SetImageList(gdmgr._htb_core, gdmgr._himl_24x24, 0); ToolBar_SetDisabledImageList(gdmgr._htb_core, gdmgr._himl_24x24_dis); ShowWindow(gdmgr._htb_core, SW_SHOW); return gdmgr._htb_core; }
// ------------------------------------------------------------------------ HWND init_toolbar_sys(HINSTANCE hinst, HWND hdlgP) { int idx = 0; // Create a toolbar gdmgr._htb_sys = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR)NULL, WS_CHILD | CCS_ADJUSTABLE | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT | TBSTYLE_CHECK, 0, 0, 0, 0, hdlgP, (HMENU)IDR_SYSMENU, gdmgr._hinst, NULL); // Send the TB_BUTTONSTRUCTSIZE message, which is required for backward compatibility ToolBar_ButtonStructSize(gdmgr._htb_sys, sizeof(TBBUTTON)); ToolBar_SetButtonSize(gdmgr._htb_sys, 80, 80); gdmgr._tbBtns_sys[idx].iBitmap = MAKELONG(gdmgr._iico_title_sync, 0); // 为了工具提示作到简单,IDM_FILE_SAVE最好就是字串,它就是String Table中一个值 gdmgr._tbBtns_sys[idx].idCommand = IDM_SYS_SYNC; gdmgr._tbBtns_sys[idx].fsState = TBSTATE_ENABLED; gdmgr._tbBtns_sys[idx].fsStyle = TBSTYLE_BUTTON; gdmgr._tbBtns_sys[idx].dwData = 0L; gdmgr._tbBtns_sys[idx].iString = 0; idx ++; gdmgr._tbBtns_sys[idx].iBitmap = MAKELONG(gdmgr._iico_title_wgen, 0); gdmgr._tbBtns_sys[idx].idCommand = IDM_SYS_WGEN; gdmgr._tbBtns_sys[idx].fsState = TBSTATE_ENABLED; gdmgr._tbBtns_sys[idx].fsStyle = TBSTYLE_BUTTON; gdmgr._tbBtns_sys[idx].dwData = 0L; gdmgr._tbBtns_sys[idx].iString = 0; idx ++; gdmgr._tbBtns_sys[idx].iBitmap = MAKELONG(gdmgr._iico_title_xchg, 0); gdmgr._tbBtns_sys[idx].idCommand = IDM_SYS_CORE; gdmgr._tbBtns_sys[idx].fsState = TBSTATE_ENABLED; gdmgr._tbBtns_sys[idx].fsStyle = TBSTYLE_BUTTON; gdmgr._tbBtns_sys[idx].dwData = 0L; gdmgr._tbBtns_sys[idx].iString = 0; idx ++; gdmgr._tbBtns_sys[idx].iBitmap = MAKELONG(gdmgr._iico_title_play, 0); gdmgr._tbBtns_sys[idx].idCommand = IDM_SYS_PLAY; gdmgr._tbBtns_sys[idx].fsState = 0; gdmgr._tbBtns_sys[idx].fsStyle = TBSTYLE_BUTTON; gdmgr._tbBtns_sys[idx].dwData = 0L; gdmgr._tbBtns_sys[idx].iString = 0; idx ++; gdmgr._tbBtns_sys[idx].iBitmap = MAKELONG(gdmgr._iico_title_update, 0); gdmgr._tbBtns_sys[idx].idCommand = IDM_SYS_TBOX; gdmgr._tbBtns_sys[idx].fsState = TBSTATE_ENABLED; gdmgr._tbBtns_sys[idx].fsStyle = TBSTYLE_BUTTON; gdmgr._tbBtns_sys[idx].dwData = 0L; gdmgr._tbBtns_sys[idx].iString = 0; idx ++; gdmgr._tbBtns_sys[idx].iBitmap = MAKELONG(gdmgr._iico_title_about, 0); gdmgr._tbBtns_sys[idx].idCommand = IDM_SYS_BUILDER; gdmgr._tbBtns_sys[idx].fsState = TBSTATE_ENABLED; gdmgr._tbBtns_sys[idx].fsStyle = TBSTYLE_BUTTON; gdmgr._tbBtns_sys[idx].dwData = 0L; gdmgr._tbBtns_sys[idx].iString = 0; ToolBar_AddButtons(gdmgr._htb_sys, TB_BTNS_COUNT_SYS, &gdmgr._tbBtns_sys); ToolBar_AutoSize(gdmgr._htb_sys); ToolBar_SetExtendedStyle(gdmgr._htb_sys, TBSTYLE_EX_DRAWDDARROWS); ToolBar_SetImageList(gdmgr._htb_sys, gdmgr._himl_80x80, 0); ToolBar_SetDisabledImageList(gdmgr._htb_sys, gdmgr._himl_80x80_dis); ShowWindow(gdmgr._htb_sys, SW_SHOW); return gdmgr._htb_sys; }
void create_subcfg_toolbar(HWND hwndP) { TBBUTTON tbBtns[5]; int cxblank; RECT rc; GetClientRect(hwndP, &rc); cxblank = (rc.right - rc.left) - 4 * 24 - 6; if (gdmgr._htb_subcfg) { DestroyWindow(gdmgr._htb_subcfg); } // Create a toolbar gdmgr._htb_subcfg = CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR)NULL, WS_CHILD | CCS_ADJUSTABLE | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT, 0, 0, 100, 0, hwndP, (HMENU)IDR_WGENMENU, gdmgr._hinst, NULL); // Send the TB_BUTTONSTRUCTSIZE message, which is required for backward compatibility ToolBar_ButtonStructSize(gdmgr._htb_subcfg, sizeof(TBBUTTON)); ToolBar_SetButtonSize(gdmgr._htb_subcfg, 30, 30); tbBtns[0].iBitmap = MAKELONG(gdmgr._iico_reset, 0); tbBtns[0].idCommand = IDM_RESET; tbBtns[0].fsState = TBSTATE_ENABLED; tbBtns[0].fsStyle = BTNS_BUTTON; tbBtns[0].dwData = 0L; tbBtns[0].iString = -1; ToolBar_AddButtons(gdmgr._htb_subcfg, 1, &tbBtns); ToolBar_AutoSize(gdmgr._htb_subcfg); ToolBar_SetExtendedStyle(gdmgr._htb_subcfg, TBSTYLE_EX_DRAWDDARROWS); ToolBar_SetImageList(gdmgr._htb_subcfg, gdmgr._himl_24x24, 0); ShowWindow(gdmgr._htb_subcfg, SW_SHOW); SetParent(GetDlgItem(hwndP, IDOK), gdmgr._htb_subcfg); SetParent(GetDlgItem(hwndP, IDCANCEL), gdmgr._htb_subcfg); TOOLINFO ti; RECT rect; // CREATE A TOOLTIP WINDOW for OK if (gdmgr._tt_ok) { DestroyWindow(gdmgr._tt_ok); } gdmgr._tt_ok = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, GetDlgItem(gdmgr._htb_subcfg, IDOK), NULL, gdmgr._hinst, NULL ); // SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); // GET COORDINATES OF THE MAIN CLIENT AREA GetClientRect(GetDlgItem(gdmgr._htb_subcfg, IDOK), &rect); // INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE ti.cbSize = sizeof(TOOLINFO); ti.uFlags = TTF_SUBCLASS; ti.hwnd = GetDlgItem(gdmgr._htb_subcfg, IDOK); ti.hinst = gdmgr._hinst; ti.uId = 0; ti.lpszText = "Save and exit"; // ToolTip control will cover the whole window ti.rect.left = rect.left; ti.rect.top = rect.top; ti.rect.right = rect.right; ti.rect.bottom = rect.bottom; // SEND AN ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW SendMessage(gdmgr._tt_ok, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); // CREATE A TOOLTIP WINDOW for CANCEL if (gdmgr._tt_cancel) { DestroyWindow(gdmgr._tt_cancel); } gdmgr._tt_cancel = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, GetDlgItem(gdmgr._htb_subcfg, IDCANCEL), NULL, gdmgr._hinst, NULL ); // SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); // GET COORDINATES OF THE MAIN CLIENT AREA GetClientRect(GetDlgItem(gdmgr._htb_subcfg, IDCANCEL), &rect); // INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE ti.cbSize = sizeof(TOOLINFO); ti.uFlags = TTF_SUBCLASS; ti.hwnd = GetDlgItem(gdmgr._htb_subcfg, IDCANCEL); ti.hinst = gdmgr._hinst; ti.uId = 0; ti.lpszText = "Discard and exit"; // ToolTip control will cover the whole window ti.rect.left = rect.left; ti.rect.top = rect.top; ti.rect.right = rect.right; ti.rect.bottom = rect.bottom; // SEND AN ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW SendMessage(gdmgr._tt_cancel, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); return; }
//------------------------------------------------------------------- LRESULT CALLBACK WndProc (HWND hwnd, UINT mMsg, WPARAM wParam, LPARAM lParam) { switch (mMsg) { case WM_CREATE : { pophwnd(hwnd); // Create toolbar (source resides in toolbar.c). hwndToolBar = InitToolBar (hwnd,hInst) ; // Create status bar (source resides in statbar.c). hwndStatusBar = InitStatusBar (hwnd) ; if (flg_toolbar==0) ShowWindow (hwndToolBar, SW_HIDE) ; if (flg_statbar==0) ShowWindow (hwndStatusBar, SW_HIDE) ; // Create client window (contains notify list). hwndClient = CreateWindowEx (WS_EX_CLIENTEDGE, "ClientWndProc", NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU) 4, hInst, NULL) ; return 0 ; } case WM_INITMENUPOPUP : return poppad_menupop( wParam,lParam ); case WM_SETFOCUS : SetFocus (hwndClient) ; return 0 ; case WM_COMMAND : { // Menu item commands switch (LOWORD (wParam)) { // Toggle display of toolbar case IDM_VIEW_TOOLBAR : { RECT r ; if (hwndToolBar && IsWindowVisible (hwndToolBar)) { ShowWindow (hwndToolBar, SW_HIDE) ; flg_toolbar=0; } else { ShowWindow (hwndToolBar, SW_SHOW) ; flg_toolbar=1; } // Resize other windows. GetClientRect (hwnd, &r) ; PostMessage (hwnd, WM_SIZE, 0, MAKELPARAM (r.right, r.bottom)) ; break; } // Toggle display of status bar case IDM_VIEW_STATUS : { RECT r; if (hwndStatusBar && IsWindowVisible (hwndStatusBar)) { ShowWindow (hwndStatusBar, SW_HIDE) ; flg_statbar=0; } else { ShowWindow (hwndStatusBar, SW_SHOW) ; flg_statbar=1; } // Resize other windows. GetClientRect (hwnd, &r) ; PostMessage (hwnd, WM_SIZE, 0, MAKELPARAM (r.right, r.bottom)) ; break; } case IDM_HSCROLL: poppad_setsb(2); break; default: return (EditProc (hwnd, mMsg, wParam, lParam)) ; } return 0; } case WM_INITMENU : { BOOL bCheck ; HMENU hmenu = (HMENU) wParam ; // View menu items. bCheck = IsWindowVisible (hwndToolBar) ; MenuCheckMark (hmenu, IDM_VIEW_TOOLBAR, bCheck) ; bCheck = IsWindowVisible (hwndStatusBar) ; MenuCheckMark (hmenu, IDM_VIEW_STATUS, bCheck) ; bCheck=poppad_setsb(-1); MenuCheckMark (hmenu, IDM_HSCROLL, bCheck) ; return 0 ; } case WM_CLOSE : case WM_QUERYENDSESSION : return poppad_term( mMsg ); case WM_MENUSELECT : return Statusbar_MenuSelect (hwnd, wParam, lParam) ; case WM_DESTROY : RemoveProp(hwnd, PROP_NAME); PostQuitMessage (0) ; return 0 ; case WM_NOTIFY : { LPNMHDR pnmh = (LPNMHDR) lParam ; // int idCtrl = (int) wParam ; // Display notification details in notify window //DisplayNotificationDetails (wParam, lParam) ; // Toolbar notifications if ((pnmh->code >= TBN_LAST) && (pnmh->code <= TBN_FIRST)) { return ToolBarNotify (hwnd, wParam, lParam) ; } // Fetch tooltip text if (pnmh->code == TTN_NEEDTEXT) { LPTOOLTIPTEXT lpttt = (LPTOOLTIPTEXT) lParam ; CopyToolTipText (lpttt) ; } return 0 ; } case WM_WINDOWPOSCHANGING : { WINDOWPOS *wp; wp=(WINDOWPOS *)lParam; if ((wp->cy)&&(wp->cy)) { posx=wp->x;posy=wp->y; winx=wp->cx;winy=wp->cy; } } break; case WM_SIZE : { int cx = LOWORD (lParam) ; int cy = HIWORD (lParam) ; int cyStatus ; int cyTB ; int x, y ; DWORD dwStyle ; RECT rWindow ; // Ignore size message to allow auto-move and auto-size // features to be more clearly seen. if (bIgnoreSize) return 0 ; // Adjust toolbar size. if (IsWindowVisible (hwndToolBar)) { dwStyle = GetWindowLong (hwndToolBar, GWL_STYLE) ; if (dwStyle & CCS_NORESIZE) { MoveWindow (hwndToolBar, 0, 0, cx, cyToolBar, FALSE) ; } else { ToolBar_AutoSize (hwndToolBar) ; } InvalidateRect (hwndToolBar, NULL, TRUE) ; GetWindowRect (hwndToolBar, &rWindow) ; ScreenToClient (hwnd, (LPPOINT) &rWindow.left) ; ScreenToClient (hwnd, (LPPOINT) &rWindow.right) ; cyTB = rWindow.bottom - rWindow.top ; } else { cyTB = 0 ; } // Adjust status bar size. if (IsWindowVisible (hwndStatusBar)) { GetWindowRect (hwndStatusBar, &rWindow) ; cyStatus = rWindow.bottom - rWindow.top ; MoveWindow (hwndStatusBar, 0, cy - cyStatus, cx, cyStatus, TRUE) ; } else { cyStatus = 0 ; } // Adjust client window size. x = 0 ; y = cyTB ; cy -= cyStatus + cyTB; MoveWindow (hwndClient, x, y, cx, cy, TRUE) ; return 0; } case WM_COPYDATA: { COPYDATASTRUCT *pcds = (COPYDATASTRUCT*)lParam; LoadFromCommandLine((char *)pcds->lpData); return 0; } default: return (EditDefProc (hwnd, mMsg, wParam, lParam)) ; } return DefWindowProc (hwnd, mMsg, wParam, lParam) ; }