dialogs.c
来自「<Win2k系统编程>源码.次数为国人自编,内容丰富,还是不错的.」· C语言 代码 · 共 531 行 · 第 1/2 页
C
531 行
/**************************************************************************\
* dialogs.c -- dialog procedure support for uconvert
*
* Steve Firebaugh
* Microsoft Developer Support
* Copyright (c) 1992-1997 Microsoft Corporation
*
\**************************************************************************/
#define UNICODE
#include <windows.h>
#include "uconvert.h"
#include "install.h"
/* Define affecting the positioning of child windows in dialog. */
#define DLGBORDER GetSystemMetrics (SM_CXFRAME)*2
/***************************************************************************\
* FUNCTION: ConversionOptionsProc
*
* Fill Dlg with state information on WM_INITDIALOG.
* Take it back down and change internal state on WM_COMMAND, IDOK.
*
* Global variables:
* gMBFlags
* gWCFlags
* glpDefaultChar
* glpUsedDefaultChar
*
\***************************************************************************/
LRESULT CALLBACK ConversionOptionsProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
/******************************************************************\
* WM_INITDIALOG
*
* Set radio buttons appropriately.
\******************************************************************/
case WM_INITDIALOG:
if (gMBFlags & MB_PRECOMPOSED)
SendDlgItemMessage (hwnd, DID_PRECOMPOSED, BM_SETCHECK, 1, 0);
if (gMBFlags & MB_COMPOSITE)
SendDlgItemMessage (hwnd, DID_COMPOSITE, BM_SETCHECK, 1, 0);
if (gMBFlags & MB_USEGLYPHCHARS)
SendDlgItemMessage (hwnd, DID_USEGLYPHCHARS, BM_SETCHECK, 1, 0);
if (gWCFlags & WC_COMPOSITECHECK)
SendDlgItemMessage (hwnd, DID_COMPOSITECHECK, BM_SETCHECK, 1, 0);
if (gWCFlags & WC_DISCARDNS)
SendDlgItemMessage (hwnd, DID_DISCARDNS, BM_SETCHECK, 1, 0);
if (gWCFlags & WC_SEPCHARS)
SendDlgItemMessage (hwnd, DID_SEPCHARS, BM_SETCHECK, 1, 0);
if (gWCFlags & WC_DEFAULTCHAR)
SendDlgItemMessage (hwnd, DID_DEFAULTCHAR, BM_SETCHECK, 1, 0);
SendDlgItemMessage (hwnd, DID_EFDEFAULTCHAR, EM_LIMITTEXT, 1, 0);
SetDlgItemTextA (hwnd, DID_EFDEFAULTCHAR, glpDefaultChar);
if (gUsedDefaultChar)
SendDlgItemMessage (hwnd, DID_USEDDEFAULTCHAR, BM_SETCHECK, 1, 0);
SetFocus (GetDlgItem (hwnd, IDOK));
return FALSE;
case WM_COMMAND:
switch (LOWORD (wParam)) {
case IDCANCEL:
EndDialog (hwnd, FALSE);
break;
/******************************************************************\
* WM_COMMAND, IDOK
*
* Get state from radio buttons and others.
\******************************************************************/
case IDOK: {
if (SendDlgItemMessage(hwnd, DID_PRECOMPOSED, BM_GETCHECK, 0,0))
gMBFlags |= MB_PRECOMPOSED;
else
gMBFlags &= ~MB_PRECOMPOSED;
if (SendDlgItemMessage(hwnd, DID_COMPOSITE, BM_GETCHECK, 0,0))
gMBFlags |= MB_COMPOSITE;
else
gMBFlags &= ~MB_COMPOSITE;
if (SendDlgItemMessage(hwnd, DID_USEGLYPHCHARS, BM_GETCHECK, 0,0))
gMBFlags |= MB_USEGLYPHCHARS;
else
gMBFlags &= ~MB_USEGLYPHCHARS;
if (SendDlgItemMessage(hwnd, DID_DISCARDNS, BM_GETCHECK, 0,0))
gWCFlags |= WC_DISCARDNS;
else
gWCFlags &= ~WC_DISCARDNS;
if (SendDlgItemMessage(hwnd, DID_COMPOSITECHECK, BM_GETCHECK, 0,0))
gWCFlags |= WC_COMPOSITECHECK;
else
gWCFlags &= ~WC_COMPOSITECHECK;
if (SendDlgItemMessage(hwnd, DID_SEPCHARS, BM_GETCHECK, 0,0))
gWCFlags |= WC_SEPCHARS;
else
gWCFlags &= ~WC_SEPCHARS;
if (SendDlgItemMessage(hwnd, DID_DEFAULTCHAR, BM_GETCHECK, 0,0))
gWCFlags |= WC_DEFAULTCHAR;
else
gWCFlags &= ~WC_DEFAULTCHAR;
GetDlgItemTextA (hwnd, DID_EFDEFAULTCHAR, glpDefaultChar, 2); // CHAR + NULL
EndDialog (hwnd, TRUE);
} break;
/******************************************************************\
* WM_COMMAND, DID_*
*
* Manage radio button pattern.
\******************************************************************/
case DID_PRECOMPOSED:
SendDlgItemMessage (hwnd, DID_PRECOMPOSED, BM_SETCHECK, TRUE, 0);
SendDlgItemMessage (hwnd, DID_COMPOSITE, BM_SETCHECK, FALSE, 0);
break;
case DID_COMPOSITE:
SendDlgItemMessage (hwnd, DID_PRECOMPOSED, BM_SETCHECK, FALSE, 0);
SendDlgItemMessage (hwnd, DID_COMPOSITE, BM_SETCHECK, TRUE, 0);
break;
}
break; /* end WM_COMMAND */
case WM_SYSCOMMAND:
if (LOWORD (wParam) == SC_CLOSE)
EndDialog (hwnd, FALSE);
break;
} /* end switch */
return FALSE;
}
/***************************************************************************\
* FUNCTION: SourceOptionsProc
*
* Fill Dlg with state information on WM_INITDIALOG.
* Take it back down and change internal state on WM_COMMAND, IDOK.
*
* Global variables:
* gTypeSource
* giSourceCodePage
* giDestinationCodePage
*
\***************************************************************************/
LRESULT CALLBACK SourceOptionsProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
TCHAR buffer[50];
switch (message) {
/******************************************************************\
* WM_INITDIALOG
*
* Set radio buttons appropriately.
\******************************************************************/
case WM_INITDIALOG:
SetWindowText (hwnd, LoadResourceString(IDS_INTERPRET_SOURCE_AS));
ListInstalledTables (GetDlgItem (hwnd, DID_CODEPAGELIST),CB_ADDSTRING, TRUE);
if (gTypeSource == TYPEUNICODE)
SendDlgItemMessage (hwnd, DID_RBUNICODE, BM_SETCHECK, 1, 0);
/*
* if gTypeSource == TYPECODEPAGE, then see if it is one of the
* standard radio buttons. If so, check the right one.
* if not, check, "other" and select correct entry in combobox.
*/
else if (gTypeSource == TYPECODEPAGE) {
if (giSourceCodePage == GetACP())
SendDlgItemMessage (hwnd, DID_RBANSICP, BM_SETCHECK, 1, 0);
else if (giSourceCodePage == GetOEMCP())
SendDlgItemMessage (hwnd, DID_RBOEMCP, BM_SETCHECK, 1, 0);
else {
SendDlgItemMessage (hwnd, DID_RBOTHERCP, BM_SETCHECK, 1, 0);
wsprintf (buffer, TEXT("%d"), giSourceCodePage);
SendDlgItemMessage (hwnd, DID_CODEPAGELIST, CB_SELECTSTRING, 0, (LPARAM)buffer);
}
} else {
// OK to not be specified here. Wait for user to make choice.
}
SetFocus (GetDlgItem (hwnd, IDOK));
return FALSE;
case WM_COMMAND:
switch (LOWORD (wParam)) {
case IDCANCEL:
EndDialog (hwnd, FALSE);
break;
/******************************************************************\
* WM_COMMAND, IDOK
*
* Get state from radio buttons and others.
\******************************************************************/
case IDOK: {
BOOL success;
if (SendDlgItemMessage(hwnd, DID_RBUNICODE, BM_GETCHECK, 0,0)) {
gTypeSource = TYPEUNICODE;
} else if (SendDlgItemMessage(hwnd, DID_RBANSICP, BM_GETCHECK, 0,0)) {
gTypeSource = TYPECODEPAGE;
giSourceCodePage=GetACP();
} else if (SendDlgItemMessage(hwnd, DID_RBOEMCP, BM_GETCHECK, 0,0)) {
gTypeSource = TYPECODEPAGE;
giSourceCodePage=GetOEMCP();
} else if (SendDlgItemMessage(hwnd, DID_RBOTHERCP, BM_GETCHECK, 0,0)) {
gTypeSource = TYPECODEPAGE;
giSourceCodePage=GetDlgItemInt (hwnd, DID_CODEPAGELIST, &success, FALSE);
} else
gTypeSource = TYPEUNKNOWN;
EndDialog (hwnd, TRUE);
} break;
}
break; /* end WM_COMMAND */
case WM_SYSCOMMAND:
if (LOWORD (wParam) == SC_CLOSE)
EndDialog (hwnd, FALSE);
break;
} /* end switch */
return FALSE;
}
/***************************************************************************\
* FUNCTION: DestinationOptionsProc
*
* Fill Dlg with state information on WM_INITDIALOG.
* Take it back down and change internal state on WM_COMMAND, IDOK.
*
*
* Global variables:
* gTypeSource
* giSourceCodePage
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?