DIALOGS.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:21k
源码类别:
Windows编程
开发平台:
Visual C++
- /*************************************************************************
- **
- ** OLE 2 Sample Code
- **
- ** dialogs.c
- **
- ** This file contains dialog functions and support function
- **
- ** (c) Copyright Microsoft Corp. 1992 - 1996 All Rights Reserved
- **
- *************************************************************************/
- #include "outline.h"
- OLEDBGDATA
- extern LPOUTLINEAPP g_lpApp;
- static OLECHAR g_szBuf[MAXSTRLEN+1];
- static LPSTR g_lpszDlgTitle;
- // REVIEW: should use string resource for messages
- static OLECHAR ErrMsgInvalidRange[] = OLESTR("Invalid Range entered!");
- static OLECHAR ErrMsgInvalidValue[] = OLESTR("Invalid Value entered!");
- static OLECHAR ErrMsgInvalidName[] = OLESTR("Invalid Name entered!");
- static OLECHAR ErrMsgNullName[] = OLESTR("NULL string disallowed!");
- static OLECHAR ErrMsgNameNotFound[] = OLESTR("Name doesn't exist!");
- /* InputTextDlg
- * ------------
- *
- * Put up a dialog box to allow the user to edit text
- */
- BOOL InputTextDlg(HWND hWnd, LPSTR lpszText, LPSTR lpszDlgTitle)
- {
- int nResult;
- g_lpszDlgTitle = lpszDlgTitle;
- A2W (lpszText, g_szBuf, MAXSTRLEN+1); // preload dialog with input text
- nResult = DialogBox(g_lpApp->m_hInst, (LPSTR)"AddEditLine", hWnd,
- (DLGPROC)AddEditDlgProc);
- if (nResult) {
- W2A(g_szBuf, lpszText, MAXSTRLEN+1);
- return TRUE;
- } else {
- return FALSE;
- }
- }
- /* AddEditDlgProc
- * --------------
- *
- * This procedure is associated with the dialog box that is included in
- * the function name of the procedure. It provides the service routines
- * for the events (messages) that occur because the end user operates
- * one of the dialog box's buttons, entry fields, or controls.
- */
- BOOL CALLBACK EXPORT AddEditDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
- {
- HWND hEdit;
- char szAnsiString[256];
- switch(Message) {
- case WM_INITDIALOG:
- /* initialize working variables */
- hEdit=GetDlgItem(hDlg,IDD_EDIT);
- SendMessage(hEdit,EM_LIMITTEXT,(WPARAM)MAXSTRLEN,0L);
- SetWindowText(hDlg, g_lpszDlgTitle);
- W2A (g_szBuf, szAnsiString, 256);
- SetDlgItemText(hDlg,IDD_EDIT, szAnsiString);
- break; /* End of WM_INITDIALOG */
- case WM_CLOSE:
- /* Closing the Dialog behaves the same as Cancel */
- PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
- break; /* End of WM_CLOSE */
- case WM_COMMAND:
- switch (wParam) {
- case IDOK:
- /* save data values entered into the controls
- ** and dismiss the dialog box returning TRUE
- */
- GetDlgItemText(hDlg,IDD_EDIT,(LPSTR)g_szBuf,MAXSTRLEN+1);
- EndDialog(hDlg, TRUE);
- break;
- case IDCANCEL:
- /* ignore data values entered into the controls
- ** and dismiss the dialog box returning FALSE
- */
- EndDialog(hDlg, FALSE);
- break;
- }
- break; /* End of WM_COMMAND */
- default:
- return FALSE;
- }
- return TRUE;
- } /* End of AddEditDlgProc */
- /* SetLineHeightDlgProc
- * --------------------
- *
- * Dialog procedure for set line height
- */
- BOOL CALLBACK EXPORT SetLineHeightDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
- {
- BOOL fTranslated;
- BOOL fEnable;
- static LPINT lpint;
- int nHeight;
- static int nMaxHeight;
- switch (Message) {
- case WM_INITDIALOG:
- {
- char cBuf[80];
- nMaxHeight = XformHeightInPixelsToHimetric(NULL,
- LISTBOX_HEIGHT_LIMIT);
- lpint = (LPINT)lParam;
- SetDlgItemInt(hDlg, IDD_EDIT, *lpint, FALSE);
- wsprintf(cBuf, "Maximum value is %d units", nMaxHeight);
- SetDlgItemText(hDlg, IDD_LIMIT, (LPSTR)cBuf);
- break;
- }
- case WM_COMMAND:
- switch (wParam) {
- case IDOK:
- if (IsDlgButtonChecked(hDlg, IDD_CHECK)) {
- *lpint = -1;
- }
- else {
- /* save the value in the edit control */
- nHeight = GetDlgItemInt(hDlg, IDD_EDIT,
- (BOOL FAR*)&fTranslated, FALSE);
- if (!fTranslated || !nHeight || (nHeight>nMaxHeight)){
- OutlineApp_ErrorMessage(g_lpApp,
- ErrMsgInvalidValue);
- break;
- }
- *lpint = nHeight;
- }
- EndDialog(hDlg, TRUE);
- break;
- case IDCANCEL:
- *lpint = 0;
- EndDialog(hDlg, FALSE);
- break;
- case IDD_CHECK:
- fEnable = !IsDlgButtonChecked(hDlg, IDD_CHECK);
- EnableWindow(GetDlgItem(hDlg, IDD_EDIT), fEnable);
- EnableWindow(GetDlgItem(hDlg, IDD_TEXT), fEnable);
- break;
- }
- break; /* WM_COMMAND */
- case WM_CLOSE: /* Closing the Dialog behaves the same as Cancel */
- PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
- break; /* End of WM_CLOSE */
- default:
- return FALSE;
- }
- return TRUE;
- } /* end of SetLineHeightProc */
- /* DefineNameDlgProc
- * -----------------
- *
- * Dialog procedure for define name
- */
- BOOL CALLBACK EXPORT DefineNameDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
- {
- static HWND hCombo;
- static LPOUTLINEDOC lpOutlineDoc = NULL;
- static LPOUTLINENAMETABLE lpOutlineNameTable = NULL;
- LPOUTLINENAME lpOutlineName = NULL;
- UINT nIndex;
- LINERANGE lrSel;
- BOOL fTranslated;
- char szAnsiString[256];
- switch(Message) {
- case WM_INITDIALOG:
- /* initialize working variables */
- hCombo=GetDlgItem(hDlg,IDD_COMBO);
- lpOutlineDoc = (LPOUTLINEDOC) lParam;
- lpOutlineNameTable = OutlineDoc_GetNameTable(lpOutlineDoc);
- SendMessage(hCombo,CB_LIMITTEXT,(WPARAM)MAXNAMESIZE,0L);
- NameDlg_LoadComboBox(lpOutlineNameTable, hCombo);
- OutlineDoc_GetSel(lpOutlineDoc, (LPLINERANGE)&lrSel);
- lpOutlineName = OutlineNameTable_FindNamedRange(
- lpOutlineNameTable,
- &lrSel
- );
- /* if current selection already has a name, hilight it */
- if (lpOutlineName) {
- nIndex = (int) SendMessage(
- hCombo,
- CB_FINDSTRINGEXACT,
- (WPARAM)0xffff,
- (LPARAM)(LPCSTR)lpOutlineName->m_szName
- );
- if (nIndex != CB_ERR) {
- SendMessage(hCombo, CB_SETCURSEL, (WPARAM)nIndex, 0L);
- }
- }
- SetDlgItemInt(hDlg, IDD_FROM, (UINT)lrSel.m_nStartLine+1,FALSE);
- SetDlgItemInt(hDlg, IDD_TO, (UINT)lrSel.m_nEndLine+1, FALSE);
- break; /* End of WM_INITDIALOG */
- case WM_CLOSE:
- /* Closing the Dialog behaves the same as Cancel */
- PostMessage(hDlg, WM_COMMAND, IDD_CLOSE, 0L);
- break; /* End of WM_CLOSE */
- case WM_COMMAND:
- switch(wParam) {
- case IDOK:
- GetDlgItemText(hDlg,IDD_COMBO,(LPSTR)g_szBuf,MAXNAMESIZE);
- if(! SendMessage(hCombo,WM_GETTEXTLENGTH,0,0L)) {
- W2A (ErrMsgNullName, szAnsiString, 256);
- MessageBox(
- hDlg,
- szAnsiString,
- NULL,
- MB_ICONEXCLAMATION
- );
- break;
- } else if(SendMessage(hCombo,CB_GETCURSEL,0,0L)==CB_ERR &&
- wcschr(g_szBuf, ' ')) {
- W2A (ErrMsgInvalidName, szAnsiString, 256);
- MessageBox(
- hDlg,
- szAnsiString,
- NULL,
- MB_ICONEXCLAMATION
- );
- break;
- } else {
- nIndex = (int) SendMessage(hCombo,CB_FINDSTRINGEXACT,
- (WPARAM)0xffff,(LPARAM)(LPCSTR)g_szBuf);
- /* Line indices are 1 less than the number in
- ** the row heading
- */
- lrSel.m_nStartLine = GetDlgItemInt(hDlg, IDD_FROM,
- (BOOL FAR*)&fTranslated, FALSE) - 1;
- if(! fTranslated) {
- OutlineApp_ErrorMessage(g_lpApp,
- ErrMsgInvalidRange);
- break;
- }
- lrSel.m_nEndLine = GetDlgItemInt(hDlg, IDD_TO,
- (BOOL FAR*)&fTranslated, FALSE) - 1;
- if (!fTranslated ||
- (lrSel.m_nStartLine < 0) ||
- (lrSel.m_nEndLine < lrSel.m_nStartLine) ||
- (lrSel.m_nEndLine >= OutlineDoc_GetLineCount(
- lpOutlineDoc))) {
- OutlineApp_ErrorMessage(g_lpApp,
- ErrMsgInvalidRange);
- break;
- }
- if(nIndex != CB_ERR) {
- NameDlg_UpdateName(
- hCombo,
- lpOutlineDoc,
- nIndex,
- g_szBuf,
- &lrSel
- );
- } else {
- NameDlg_AddName(
- hCombo,
- lpOutlineDoc,
- g_szBuf,
- &lrSel
- );
- }
- }
- // fall through
- case IDD_CLOSE:
- /* Ignore data values entered into the controls */
- /* and dismiss the dialog window returning FALSE */
- EndDialog(hDlg,0);
- break;
- case IDD_DELETE:
- GetDlgItemText(hDlg,IDD_COMBO,(LPSTR)szAnsiString,MAXNAMESIZE);
- if((nIndex=(int)SendMessage(hCombo,CB_FINDSTRINGEXACT,
- (WPARAM)0xffff,(LPARAM)(LPCSTR)szAnsiString))==CB_ERR) {
- W2A (ErrMsgNameNotFound, szAnsiString, 256);
- MessageBox(hDlg, szAnsiString, NULL, MB_ICONEXCLAMATION);
- }
- else {
- NameDlg_DeleteName(hCombo, lpOutlineDoc, nIndex);
- }
- break;
- case IDD_COMBO:
- if(HIWORD(lParam) == CBN_SELCHANGE) {
- nIndex=(int)SendMessage(hCombo, CB_GETCURSEL, 0, 0L);
- lpOutlineName = (LPOUTLINENAME)SendMessage(
- hCombo,
- CB_GETITEMDATA,
- (WPARAM)nIndex,
- 0L
- );
- SetDlgItemInt(
- hDlg,
- IDD_FROM,
- (UINT) lpOutlineName->m_nStartLine + 1,
- FALSE
- );
- SetDlgItemInt(
- hDlg,
- IDD_TO,
- (UINT) lpOutlineName->m_nEndLine + 1,
- FALSE
- );
- }
- }
- break; /* End of WM_COMMAND */
- default:
- return FALSE;
- }
- return TRUE;
- } /* End of DefineNameDlgProc */
- /* GotoNameDlgProc
- * ---------------
- *
- * Dialog procedure for goto name
- */
- BOOL CALLBACK EXPORT GotoNameDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
- {
- static HWND hLBName;
- static LPOUTLINEDOC lpOutlineDoc = NULL;
- static LPOUTLINENAMETABLE lpOutlineNameTable = NULL;
- UINT nIndex;
- LINERANGE lrLineRange;
- LPOUTLINENAME lpOutlineName;
- switch(Message) {
- case WM_INITDIALOG:
- /* initialize working variables */
- lpOutlineDoc = (LPOUTLINEDOC) lParam;
- lpOutlineNameTable = OutlineDoc_GetNameTable(lpOutlineDoc);
- hLBName=GetDlgItem(hDlg,IDD_LINELISTBOX);
- NameDlg_LoadListBox(lpOutlineNameTable, hLBName);
- // highlight 1st item
- SendMessage(hLBName, LB_SETCURSEL, 0, 0L);
- // trigger to initialize edit control
- SendMessage(hDlg, WM_COMMAND, (WPARAM)IDD_LINELISTBOX,
- MAKELONG(hLBName, LBN_SELCHANGE));
- break; /* End of WM_INITDIALOG */
- case WM_CLOSE:
- /* Closing the Dialog behaves the same as Cancel */
- PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
- break; /* End of WM_CLOSE */
- case WM_COMMAND:
- switch(wParam) {
- case IDD_LINELISTBOX:
- if(HIWORD(lParam) == LBN_SELCHANGE) {
- // update the line range display
- nIndex=(int)SendMessage(hLBName, LB_GETCURSEL, 0, 0L);
- lpOutlineName = (LPOUTLINENAME)SendMessage(hLBName, LB_GETITEMDATA,
- (WPARAM)nIndex,0L);
- if (lpOutlineName) {
- SetDlgItemInt(
- hDlg,
- IDD_FROM,
- (UINT) lpOutlineName->m_nStartLine + 1,
- FALSE
- );
- SetDlgItemInt(
- hDlg,
- IDD_TO,
- (UINT) lpOutlineName->m_nEndLine + 1,
- FALSE
- );
- }
- break;
- }
- // double click will fall through
- else if(HIWORD(lParam) != LBN_DBLCLK)
- break;
- case IDOK:
- nIndex=(int)SendMessage(hLBName,LB_GETCURSEL,0,0L);
- if(nIndex!=LB_ERR) {
- lpOutlineName = (LPOUTLINENAME)SendMessage(hLBName,
- LB_GETITEMDATA, (WPARAM)nIndex, 0L);
- lrLineRange.m_nStartLine=lpOutlineName->m_nStartLine;
- lrLineRange.m_nEndLine = lpOutlineName->m_nEndLine;
- OutlineDoc_SetSel(lpOutlineDoc, &lrLineRange);
- } // fall through
- case IDCANCEL:
- /* Ignore data values entered into the controls */
- /* and dismiss the dialog window returning FALSE */
- EndDialog(hDlg,0);
- break;
- }
- break; /* End of WM_COMMAND */
- default:
- return FALSE;
- }
- return TRUE;
- } /* End of GotoNameDlgProc */
- /* NameDlg_LoadComboBox
- * --------------------
- *
- * Load defined names into combo box
- */
- void NameDlg_LoadComboBox(LPOUTLINENAMETABLE lpOutlineNameTable,HWND hCombo)
- {
- LPOUTLINENAME lpOutlineName;
- int i, nIndex;
- int nCount;
- nCount=OutlineNameTable_GetCount((LPOUTLINENAMETABLE)lpOutlineNameTable);
- if(!nCount) return;
- SendMessage(hCombo,WM_SETREDRAW,(WPARAM)FALSE,0L);
- for(i=0; i<nCount; i++) {
- lpOutlineName=OutlineNameTable_GetName((LPOUTLINENAMETABLE)lpOutlineNameTable,i);
- nIndex = (int)SendMessage(
- hCombo,
- CB_ADDSTRING,
- 0,
- (LPARAM)(LPCSTR)lpOutlineName->m_szName
- );
- SendMessage(hCombo,CB_SETITEMDATA,(WPARAM)nIndex,(LPARAM)lpOutlineName);
- }
- SendMessage(hCombo,WM_SETREDRAW,(WPARAM)TRUE,0L);
- }
- /* NameDlg_LoadListBox
- * -------------------
- *
- * Load defined names into list box
- */
- void NameDlg_LoadListBox(LPOUTLINENAMETABLE lpOutlineNameTable,HWND hListBox)
- {
- int i;
- int nCount;
- int nIndex;
- LPOUTLINENAME lpOutlineName;
- nCount=OutlineNameTable_GetCount((LPOUTLINENAMETABLE)lpOutlineNameTable);
- SendMessage(hListBox,WM_SETREDRAW,(WPARAM)FALSE,0L);
- for(i=0; i<nCount; i++) {
- lpOutlineName=OutlineNameTable_GetName((LPOUTLINENAMETABLE)lpOutlineNameTable,i);
- nIndex = (int)SendMessage(
- hListBox,
- LB_ADDSTRING,
- 0,
- (LPARAM)(LPCSTR)lpOutlineName->m_szName
- );
- SendMessage(hListBox,LB_SETITEMDATA,(WPARAM)nIndex,(LPARAM)lpOutlineName);
- }
- SendMessage(hListBox,WM_SETREDRAW,(WPARAM)TRUE,0L);
- }
- /* NameDlg_AddName
- * ---------------
- *
- * Add a name to the name table corresponding to the name dialog
- * combo box.
- */
- void NameDlg_AddName(HWND hCombo, LPOUTLINEDOC lpOutlineDoc, LPOLESTR lpszName, LPLINERANGE lplrSel)
- {
- LPOUTLINEAPP lpOutlineApp = (LPOUTLINEAPP)g_lpApp;
- LPOUTLINENAME lpOutlineName;
- lpOutlineName = OutlineApp_CreateName(lpOutlineApp);
- if (lpOutlineName) {
- OLESTRCPY(lpOutlineName->m_szName, lpszName);
- lpOutlineName->m_nStartLine = lplrSel->m_nStartLine;
- lpOutlineName->m_nEndLine = lplrSel->m_nEndLine;
- OutlineDoc_AddName(lpOutlineDoc, lpOutlineName);
- } else {
- // REVIEW: do we need error message here?
- }
- }
- /* NameDlg_UpdateName
- * ------------------
- *
- * Update a name in the name table corresponding to a name in
- * the name dialog combo box.
- */
- void NameDlg_UpdateName(HWND hCombo, LPOUTLINEDOC lpOutlineDoc, int nIndex, LPOLESTR lpszName, LPLINERANGE lplrSel)
- {
- LPOUTLINENAME lpOutlineName;
- lpOutlineName = (LPOUTLINENAME)SendMessage(
- hCombo,
- CB_GETITEMDATA,
- (WPARAM)nIndex,
- 0L
- );
- OutlineName_SetName(lpOutlineName, lpszName);
- OutlineName_SetSel(lpOutlineName, lplrSel, TRUE /* name modified */);
- OutlineDoc_SetModified(lpOutlineDoc, TRUE, FALSE, FALSE);
- }
- /* NameDlg_DeleteName
- * ------------------
- *
- * Delete a name from the name dialog combo box and corresponding
- * name table.
- */
- void NameDlg_DeleteName(HWND hCombo, LPOUTLINEDOC lpOutlineDoc, UINT nIndex)
- {
- SendMessage(hCombo,CB_DELETESTRING,(WPARAM)nIndex,0L);
- OutlineDoc_DeleteName(lpOutlineDoc, nIndex);
- }
- /* PlaceBitmap
- * -----------
- *
- * Places a bitmap centered in the specified control in the dialog on the
- * specified DC.
- *
- */
- PlaceBitmap(HWND hDlg, int control, HDC hDC, HBITMAP hBitmap)
- {
- BITMAP bm;
- HDC hdcmem;
- HBITMAP hbmOld;
- RECT rcControl; // Rect of dialog control
- int width, height;
- GetObject(hBitmap, sizeof(BITMAP), &bm);
- hdcmem= CreateCompatibleDC(hDC);
- hbmOld = SelectObject(hdcmem, hBitmap);
- // Get rect of control in screen coords, and translate to our dialog
- // box's coordinates
- GetWindowRect(GetDlgItem(hDlg, control), &rcControl);
- MapWindowPoints(NULL, hDlg, (LPPOINT)&rcControl, 2);
- width = rcControl.right - rcControl.left;
- height = rcControl.bottom - rcControl.top;
- BitBlt(hDC, rcControl.left + (width - bm.bmWidth) / 2,
- rcControl.top + (height - bm.bmHeight) /2,
- bm.bmWidth, bm.bmHeight,
- hdcmem, 0, 0, SRCCOPY);
- SelectObject(hdcmem, hbmOld);
- DeleteDC(hdcmem);
- return 1;
- }
- /* AboutDlgProc
- * ------------
- *
- * Dialog procedure for the About function
- */
- BOOL CALLBACK EXPORT AboutDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
- {
- int narrVersion[2];
- static HBITMAP hbmLogo;
- char szAnsiString[256];
- char szAppName[250];
- switch(Message) {
- case WM_INITDIALOG:
- // get version number of app
- W2A (APPNAME, szAppName, 250);
- wsprintf(szAnsiString, "About %s", (LPSTR)szAppName);
- SetWindowText(hDlg, (LPCSTR)szAnsiString);
- OutlineApp_GetAppVersionNo(g_lpApp, narrVersion);
- wsprintf(szAnsiString, "%s version %d.%d", (LPSTR) APPDESC,
- narrVersion[0], narrVersion[1]);
- SetDlgItemText(hDlg, IDD_APPTEXT, (LPCSTR)szAnsiString);
- // Load bitmap for displaying later
- hbmLogo = LoadBitmap(g_lpApp->m_hInst, "LogoBitmap");
- TraceDebug(hDlg, IDD_BITMAPLOCATION);
- ShowWindow(GetDlgItem(hDlg, IDD_BITMAPLOCATION), SW_HIDE);
- break;
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- BeginPaint(hDlg, &ps);
- // Display bitmap in IDD_BITMAPLOCATION control area
- PlaceBitmap(hDlg, IDD_BITMAPLOCATION, ps.hdc, hbmLogo);
- EndPaint(hDlg, &ps);
- }
- break;
- case WM_CLOSE :
- PostMessage(hDlg, WM_COMMAND, IDOK, 0L);
- break;
- case WM_COMMAND :
- switch(wParam) {
- case IDOK:
- case IDCANCEL:
- if (hbmLogo) DeleteObject(hbmLogo);
- EndDialog(hDlg,0);
- break;
- }
- break;
- default :
- return FALSE;
- }
- return TRUE;
- }