660 lines
16 KiB
C
660 lines
16 KiB
C
/*************************************************************************
|
|
**
|
|
** OLE 2 Sample Code
|
|
**
|
|
** dialogs.c
|
|
**
|
|
** This file contains dialog functions and support function
|
|
**
|
|
** (c) Copyright Microsoft Corp. 1992 - 1993 All Rights Reserved
|
|
**
|
|
*************************************************************************/
|
|
|
|
#include "outline.h"
|
|
|
|
OLEDBGDATA
|
|
|
|
extern LPOUTLINEAPP g_lpApp;
|
|
|
|
static char g_szBuf[MAXSTRLEN+1];
|
|
static LPSTR g_lpszDlgTitle;
|
|
|
|
// REVIEW: should use string resource for messages
|
|
static char ErrMsgInvalidRange[] = "Invalid Range entered!";
|
|
static char ErrMsgInvalidValue[] = "Invalid Value entered!";
|
|
static char ErrMsgInvalidName[] = "Invalid Name entered!";
|
|
static char ErrMsgNullName[] = "NULL string disallowed!";
|
|
static char ErrMsgNameNotFound[] = "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;
|
|
lstrcpy((LPSTR)g_szBuf, lpszText); // preload dialog with input text
|
|
|
|
nResult = DialogBox(g_lpApp->m_hInst, (LPSTR)"AddEditLine", hWnd,
|
|
(DLGPROC)AddEditDlgProc);
|
|
if (nResult) {
|
|
lstrcpy(lpszText, (LPSTR)g_szBuf);
|
|
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;
|
|
|
|
switch(Message) {
|
|
case WM_INITDIALOG:
|
|
/* initialize working variables */
|
|
hEdit=GetDlgItem(hDlg,IDD_EDIT);
|
|
SendMessage(hEdit,EM_LIMITTEXT,(WPARAM)MAXSTRLEN,0L);
|
|
SetWindowText(hDlg, g_lpszDlgTitle);
|
|
SetDlgItemText(hDlg,IDD_EDIT, g_szBuf);
|
|
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;
|
|
|
|
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)) {
|
|
MessageBox(
|
|
hDlg,
|
|
ErrMsgNullName,
|
|
NULL,
|
|
MB_ICONEXCLAMATION
|
|
);
|
|
break;
|
|
} else if(SendMessage(hCombo,CB_GETCURSEL,0,0L)==CB_ERR &&
|
|
_fstrchr(g_szBuf, ' ')) {
|
|
MessageBox(
|
|
hDlg,
|
|
ErrMsgInvalidName,
|
|
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)g_szBuf,MAXNAMESIZE);
|
|
if((nIndex=(int)SendMessage(hCombo,CB_FINDSTRINGEXACT,
|
|
(WPARAM)0xffff,(LPARAM)(LPCSTR)g_szBuf))==CB_ERR)
|
|
MessageBox(hDlg, ErrMsgNameNotFound, 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, LPSTR lpszName, LPLINERANGE lplrSel)
|
|
{
|
|
LPOUTLINEAPP lpOutlineApp = (LPOUTLINEAPP)g_lpApp;
|
|
LPOUTLINENAME lpOutlineName;
|
|
|
|
lpOutlineName = OutlineApp_CreateName(lpOutlineApp);
|
|
|
|
if (lpOutlineName) {
|
|
lstrcpy(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, LPSTR 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;
|
|
|
|
switch(Message) {
|
|
|
|
case WM_INITDIALOG:
|
|
// get version number of app
|
|
wsprintf(g_szBuf, "About %s", (LPCSTR)APPNAME);
|
|
SetWindowText(hDlg, (LPCSTR)g_szBuf);
|
|
OutlineApp_GetAppVersionNo(g_lpApp, narrVersion);
|
|
wsprintf(g_szBuf, "%s version %d.%d", (LPSTR) APPDESC,
|
|
narrVersion[0], narrVersion[1]);
|
|
SetDlgItemText(hDlg, IDD_APPTEXT, (LPCSTR)g_szBuf);
|
|
|
|
// 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;
|
|
}
|