PROPBAR.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:15k
源码类别:
Windows编程
开发平台:
Visual C++
- /****************************************************************************/
- /* */
- /* Copyright (C) 1987-1996 Microsoft Corp. */
- /* All Rights Reserved */
- /* */
- /****************************************************************************/
- /****************************** Module Header *******************************
- * Module Name: propbar.c
- *
- * Support for the Properties Bar.
- *
- * History:
- *
- ****************************************************************************/
- #include "imagedit.h"
- #include "dialogs.h"
- #include <windowsx.h>
- #define IMPOSSIBLEVALUE 0x7FFF
- STATICFN VOID NEAR PropBarProcessCommand(HWND hwnd, INT idCtrl,
- INT NotifyCode);
- /*
- * Cache variables. These cache the values of some displayed fields.
- * The field is updated only if the value changes, which avoids flicker.
- * They are initialized to a large value so that the first "set" to
- * any value will always cause the field to be updated.
- */
- static INT xSave = IMPOSSIBLEVALUE;
- static INT ySave = IMPOSSIBLEVALUE;
- static INT cxSave = IMPOSSIBLEVALUE;
- static INT cySave = IMPOSSIBLEVALUE;
- static INT xHotSpotSave = IMPOSSIBLEVALUE;
- static INT yHotSpotSave = IMPOSSIBLEVALUE;
- /************************************************************************
- * PropBarDlgProc
- *
- * This is the dialog procedure for the PropBar ribbon window.
- *
- * History:
- *
- ************************************************************************/
- DIALOGPROC PropBarDlgProc(
- HWND hwnd,
- UINT msg,
- WPARAM wParam,
- LPARAM lParam)
- {
- switch (msg) {
- case WM_INITDIALOG:
- /*
- * Set this global right away. Other routines that
- * might be called before CreateDialog returns depend
- * on this global.
- */
- ghwndPropBar = hwnd;
- PropBarUpdate();
- /*
- * Return TRUE so that the dialog manager does NOT
- * set the focus for me. This prevents the PropBar
- * window from initially having the focus when the
- * editor is started.
- */
- return TRUE;
- case WM_PAINT:
- {
- HDC hdc;
- RECT rc;
- PAINTSTRUCT ps;
- HPEN hpenWindowFrame;
- /*
- * Draw our border lines.
- */
- GetClientRect(hwnd, &rc);
- hdc = BeginPaint(hwnd, &ps);
- SelectObject(hdc, GetStockObject(WHITE_PEN));
- MoveToEx(hdc, rc.left, rc.top, NULL);
- LineTo(hdc, rc.right, rc.top);
- SelectObject(hdc, hpenDarkGray);
- MoveToEx(hdc, rc.left, (rc.top + gcyPropBar) - gcyBorder - 1, NULL);
- LineTo(hdc, rc.right, (rc.top + gcyPropBar) - gcyBorder - 1);
- hpenWindowFrame = CreatePen(PS_SOLID, gcyBorder,
- GetSysColor(COLOR_WINDOWFRAME));
- SelectObject(hdc, hpenWindowFrame);
- MoveToEx(hdc, rc.left, (rc.top + gcyPropBar) - gcyBorder, NULL);
- LineTo(hdc, rc.right, (rc.top + gcyPropBar) - gcyBorder);
- EndPaint(hwnd, &ps);
- DeleteObject(hpenWindowFrame);
- }
- break;
- case WM_CTLCOLORBTN:
- case WM_CTLCOLORDLG:
- case WM_CTLCOLORLISTBOX:
- case WM_CTLCOLORSTATIC:
- switch (GET_WM_CTLCOLOR_TYPE(wParam, lParam, msg)) {
- case CTLCOLOR_BTN:
- case CTLCOLOR_DLG:
- case CTLCOLOR_LISTBOX:
- return (BOOL)GetStockObject(LTGRAY_BRUSH);
- case CTLCOLOR_STATIC:
- SetBkColor(GET_WM_CTLCOLOR_HDC(wParam, lParam, msg),
- RGB_LIGHTGRAY);
- return (BOOL)GetStockObject(LTGRAY_BRUSH);
- }
- return (BOOL)NULL;
- case WM_COMMAND:
- PropBarProcessCommand(hwnd,
- GET_WM_COMMAND_ID(wParam, lParam),
- GET_WM_COMMAND_CMD(wParam, lParam));
- break;
- case WM_DESTROY:
- /*
- * Null out the global window handle for the prop bar
- * for safety's sake.
- */
- ghwndPropBar = NULL;
- break;
- default:
- return FALSE;
- }
- return FALSE;
- }
- /************************************************************************
- * PropBarProcessCommand
- *
- *
- * Arguments:
- * HWND hwnd - The window handle.
- * INT idCtrl - The id of the control the WM_COMMAND is for.
- * INT NotifyCode - The control's notification code.
- *
- * History:
- *
- ************************************************************************/
- STATICFN VOID NEAR PropBarProcessCommand(
- HWND hwnd,
- INT idCtrl,
- INT NotifyCode)
- {
- INT iSelect;
- PIMAGEINFO pImage;
- switch (idCtrl) {
- case DID_PROPBARIMAGE:
- if (NotifyCode == CBN_SELCHANGE) {
- if ((iSelect = (INT)SendDlgItemMessage(hwnd,
- DID_PROPBARIMAGE, CB_GETCURSEL, 0, 0L)) != CB_ERR) {
- /*
- * Get a pointer to the selected image (stored in the
- * listbox items data field).
- */
- pImage = (PIMAGEINFO)SendDlgItemMessage(hwnd,
- DID_PROPBARIMAGE, CB_GETITEMDATA, iSelect, 0L);
- /*
- * Open the image. If it fails, be sure to set the
- * combobox selection back to the current image.
- */
- if (!ImageOpen(pImage)) {
- PropBarSetImage(gpImageCur);
- break;
- }
- SetFocus(ghwndMain);
- }
- }
- break;
- case IDOK:
- case IDCANCEL:
- SetFocus(ghwndMain);
- break;
- }
- }
- /************************************************************************
- * PropBarUpdate
- *
- * This function updates the Properties Bar for the selection of a
- * new image or file. It fills the Image combo with the names of
- * the images in the current file and shows/hides the HotSpot display.
- *
- * History:
- *
- ************************************************************************/
- VOID PropBarUpdate(VOID)
- {
- HWND hwndCombo;
- PIMAGEINFO pImage;
- INT idLabel;
- INT i;
- if (gpImageCur || gpszFileName) {
- switch (giType) {
- case FT_BITMAP:
- idLabel = IDS_BITMAPIMAGELABEL;
- break;
- case FT_ICON:
- idLabel = IDS_ICONIMAGELABEL;
- break;
- case FT_CURSOR:
- idLabel = IDS_CURSORIMAGELABEL;
- break;
- }
- }
- else {
- idLabel = IDS_NULL;
- }
- SetDlgItemText(ghwndPropBar, DID_PROPBARIMAGELABEL, ids(idLabel));
- /*
- * Get the handle to the combo box and clear out all items.
- */
- hwndCombo = GetDlgItem(ghwndPropBar, DID_PROPBARIMAGE);
- SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0);
- /*
- * Fill the combo box with the images.
- */
- for (pImage = gpImageHead; pImage; pImage = pImage->pImageNext) {
- i = (INT)SendMessage(hwndCombo, CB_INSERTSTRING, (WPARAM)-1,
- pImage->pDevice ?
- (DWORD)(LPSTR)pImage->pDevice->szDesc :
- (DWORD)(LPSTR)ids(IDS_UNKNOWNIMAGEFORMAT));
- SendMessage(hwndCombo, CB_SETITEMDATA, i, (DWORD)(LPSTR)pImage);
- }
- /*
- * Select the current image.
- */
- PropBarSetImage(gpImageCur);
- /*
- * Show/Hide the HotSpot info depending on whether this is
- * a cursor or not.
- */
- if (giType == FT_CURSOR) {
- if (gpImageCur)
- PropBarSetHotSpot(gpImageCur->iHotspotX, gpImageCur->iHotspotY);
- else
- PropBarClearHotSpot();
- PropBarShowHotSpot(TRUE);
- }
- else {
- PropBarShowHotSpot(FALSE);
- }
- }
- /************************************************************************
- * PropBarSetImage
- *
- *
- * History:
- *
- ************************************************************************/
- VOID PropBarSetImage(
- PIMAGEINFO pImage)
- {
- if (pImage)
- SendDlgItemMessage(ghwndPropBar, DID_PROPBARIMAGE, CB_SELECTSTRING,
- (WPARAM)-1, (DWORD)(LPSTR)pImage->pDevice->szDesc);
- else
- SendDlgItemMessage(ghwndPropBar, DID_PROPBARIMAGE, CB_SETCURSEL,
- (WPARAM)-1, 0);
- }
- /************************************************************************
- * PropBarSetPos
- *
- *
- * Arguments:
- *
- * History:
- *
- ************************************************************************/
- VOID PropBarSetPos(
- INT x,
- INT y)
- {
- CHAR szBuf[CCHTEXTMAX];
- if (x != xSave || y != ySave) {
- wsprintf(szBuf, "%d, %d", x, y);
- SetDlgItemText(ghwndPropBar, DID_PROPBARPOS, szBuf);
- /*
- * Save them for the next time.
- */
- xSave = x;
- ySave = y;
- }
- }
- /************************************************************************
- * PropBarClearPos
- *
- *
- * Arguments:
- *
- * History:
- *
- ************************************************************************/
- VOID PropBarClearPos(VOID)
- {
- SetDlgItemText(ghwndPropBar, DID_PROPBARPOS, "");
- /*
- * Reset the cache variables so that the next "set" of
- * the position is sure to update the display fields.
- */
- xSave = IMPOSSIBLEVALUE;
- ySave = IMPOSSIBLEVALUE;
- }
- /************************************************************************
- * PropBarSetSize
- *
- *
- * Arguments:
- *
- * History:
- *
- ************************************************************************/
- VOID PropBarSetSize(
- POINT pt1,
- POINT pt2)
- {
- CHAR szBuf[CCHTEXTMAX];
- INT cx;
- INT cy;
- NormalizePoints(&pt1, &pt2);
- cx = ((pt2.x - pt1.x) / gZoomFactor) + 1;
- cy = ((pt2.y - pt1.y) / gZoomFactor) + 1;
- if (cx != cxSave || cy != cySave) {
- wsprintf(szBuf, "%dx%d", cx, cy);
- SetDlgItemText(ghwndPropBar, DID_PROPBARSIZE, szBuf);
- /*
- * Save them for the next time.
- */
- cxSave = cx;
- cySave = cy;
- }
- }
- /************************************************************************
- * PropBarClearSize
- *
- *
- * Arguments:
- *
- * History:
- *
- ************************************************************************/
- VOID PropBarClearSize(VOID)
- {
- SetDlgItemText(ghwndPropBar, DID_PROPBARSIZE, "");
- /*
- * Reset the cache variables so that the next "set" of
- * the position is sure to update the display fields.
- */
- cxSave = IMPOSSIBLEVALUE;
- cySave = IMPOSSIBLEVALUE;
- }
- /************************************************************************
- * PropBarSetHotSpot
- *
- *
- * Arguments:
- *
- * History:
- *
- ************************************************************************/
- VOID PropBarSetHotSpot(
- INT xHotSpot,
- INT yHotSpot)
- {
- CHAR szBuf[CCHTEXTMAX];
- if (xHotSpot != xHotSpotSave || yHotSpot != yHotSpotSave) {
- wsprintf(szBuf, "%d, %d", xHotSpot, yHotSpot);
- SetDlgItemText(ghwndPropBar, DID_PROPBARHOTSPOT, szBuf);
- /*
- * Save them for the next time.
- */
- xHotSpotSave = xHotSpot;
- yHotSpotSave = yHotSpot;
- }
- }
- /************************************************************************
- * PropBarClearHotSpot
- *
- *
- * Arguments:
- *
- * History:
- *
- ************************************************************************/
- VOID PropBarClearHotSpot(VOID)
- {
- SetDlgItemText(ghwndPropBar, DID_PROPBARHOTSPOT, "");
- /*
- * Reset the cache variables so that the next "set" of
- * the hotspot is sure to update the display fields.
- */
- xHotSpotSave = IMPOSSIBLEVALUE;
- yHotSpotSave = IMPOSSIBLEVALUE;
- }
- /************************************************************************
- * PropBarShowHotSpot
- *
- *
- * Arguments:
- *
- * History:
- *
- ************************************************************************/
- VOID PropBarShowHotSpot(
- BOOL fShow)
- {
- ShowWindow(GetDlgItem(ghwndPropBar, DID_PROPBARHOTSPOTLABEL),
- fShow ? SW_SHOWNA : SW_HIDE);
- ShowWindow(GetDlgItem(ghwndPropBar, DID_PROPBARHOTSPOT),
- fShow ? SW_SHOWNA : SW_HIDE);
- }