Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1946 lines
69 KiB

#include "hwxobj.h"
#include "resource.h"
#include "const.h"
#include "../lib/ptt/ptt.h"
#include "../lib/ddbtn/ddbtn.h"
#include "../lib/exbtn/exbtn.h"
#include "dbg.h"
#include "../common/cfont.h"
#include "hwxfe.h"
#include "cexres.h"
#include "cmnhdr.h"
#ifdef UNDER_CE // Windows CE Stub for unsupported APIs
#include "stub_ce.h"
#endif // UNDER_CE
// implementation of CHwxInkWindow
extern TCHAR szBuf[MAX_PATH];
extern TOOLINFOW ti;
WCHAR wszBuf[32];
CHwxInkWindow::CHwxInkWindow(BOOL bNT, BOOL b16, CApplet * pApp, HINSTANCE hInst):CHwxObject(hInst)
{
m_pApplet = pApp;
// m_hInstance = hInst;
m_pMB = NULL;
m_pCAC = NULL;
m_hInkWnd = NULL;
m_b16Bit = b16;
m_bNT = bNT;
m_bCAC = TRUE;
m_bSglClk = FALSE;
m_bDblClk = m_b16Bit ? FALSE : TRUE;
m_hwndTT = NULL;
m_bMouseDown = FALSE;
m_hCACMBMenu = NULL;
m_hCACMBRecog = NULL;
m_hCACMBRevert = NULL;
m_hCACMBClear = NULL;
m_hCACSwitch = NULL;
m_CACMBMenuDDBtnProc = NULL;
m_CACMBRecogEXBtnProc = NULL;
m_CACMBRevertEXBtnProc = NULL;
m_CACMBClearEXBtnProc = NULL;
m_CACSwitchDDBtnProc = NULL;
// m_hwxPadWidth = 0;
m_wPadHeight = PadWnd_Height;
m_numBoxes = 2;
m_wPadWidth = m_numBoxes * m_wPadHeight;
m_wInkWidth = m_wPadWidth + 4 + BUTTON_WIDTH;
m_wInkHeight = m_wPadHeight;
m_wCACInkHeight = PadWnd_Height;
m_wCACPLVWidth = m_wCACInkHeight + 150;
m_wCACPLVHeight = m_wCACInkHeight;
m_wCACTMPWidth = m_wCACPLVWidth - m_wCACInkHeight;
m_wCACWidth = m_wCACPLVWidth + 4 + BUTTON_WIDTH;
m_wCACHeight = m_wCACPLVHeight;
// m_wMaxHeight = (GetSystemMetrics(SM_CYSCREEN)*3)/4;
// m_wCurrentCtrlID = 0;
// m_dwLastTick = 0;
// m_dwBtnUpCount = 0;
// m_bRedundant = FALSE;
}
CHwxInkWindow::~CHwxInkWindow()
{
}
BOOL CHwxInkWindow::Initialize(TCHAR * pClsName)
{
BOOL bRet = CHwxObject::Initialize(pClsName);
if ( bRet )
{
WNDCLASS wndClass;
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = HWXWndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = sizeof(void *);
wndClass.hInstance = m_hInstance;
wndClass.hIcon = 0;
wndClass.hCursor = 0;
#ifndef UNDER_CE
wndClass.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
#else // UNDER_CE
wndClass.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
#endif // UNDER_CE
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = TEXT("HWXPad");
#if 0
if (!RegisterClass(&wndClass))
return FALSE;
#endif
//971217: ToshiaK no need to check return
RegisterClass(&wndClass);
if ( !m_b16Bit )
{
m_pMB = new CHwxMB(this,m_hInstance);
if ( !m_pMB )
return FALSE;
bRet = m_pMB->Initialize(TEXT("CHwxMB"));
if ( !bRet )
{
delete m_pMB;
m_pMB = NULL;
return FALSE;
}
}
m_pCAC = new CHwxCAC(this,m_hInstance);
if ( !m_pCAC )
{
if ( m_pMB )
{
delete m_pMB;
m_pMB = NULL;
}
return FALSE;
}
bRet = m_pCAC->Initialize(TEXT("CHwxCAC"));
if ( !bRet )
{
if ( m_pMB )
{
delete m_pMB;
m_pMB = NULL;
}
delete m_pCAC;
m_pCAC = NULL;
return FALSE;
}
}
InitCommonControls();
return bRet;
}
BOOL CHwxInkWindow::CreateUI(HWND hwndParent)
{
//990601:kotae #434 add WS_CLIPCHILDREN to remove flicker
m_hInkWnd = CreateWindowEx(0,
TEXT("HWXPad"),
TEXT(""),
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
0,0,0,0,
hwndParent,
NULL,m_hInstance,this);
if ( !m_hInkWnd )
{
return FALSE;
}
if ( m_pMB ) // NULL means we have a 16-bit program
{
if ( !m_pMB->CreateUI(m_hInkWnd) )
{
DestroyWindow(m_hInkWnd);
m_hInkWnd = NULL;
return FALSE;
}
}
if ( m_pCAC )
{
if ( !m_pCAC->CreateUI(m_hInkWnd) )
{
DestroyWindow(m_hInkWnd);
m_hInkWnd = NULL;
if ( m_pMB )
{
DestroyWindow(m_pMB->GetMBWindow());
m_pMB->SetMBWindow(NULL);
}
return FALSE;
}
}
ChangeLayout(FALSE);
SetTooltipInfo();
return TRUE;
}
BOOL CHwxInkWindow::Terminate()
{
Dbg(("CHwxInkWindow::Terminate\n"));
if ( m_pCAC )
{
(m_pCAC->GetCACThread())->StopThread();
}
if ( m_pMB )
{
(m_pMB->GetMBThread())->StopThread();
}
if ( m_pCAC )
{
delete m_pCAC;
m_pCAC = NULL;
}
if ( m_pMB )
{
delete m_pMB;
m_pMB = NULL;
}
if ( m_hInkWnd )
{
DestroyWindow(m_hInkWnd);
m_hInkWnd = NULL;
}
if ( m_hwndTT )
{
DestroyWindow(m_hwndTT);
m_hwndTT = NULL;
}
m_pApplet = NULL;
if ( m_hCACMBMenu )
{
DestroyWindow(m_hCACMBMenu);
m_hCACMBMenu = NULL;
}
if ( m_hCACMBRecog )
{
DestroyWindow(m_hCACMBRecog);
m_hCACMBRecog = NULL;
}
if ( m_hCACMBRevert )
{
DestroyWindow(m_hCACMBRevert);
m_hCACMBRevert = NULL;
}
if ( m_hCACMBClear )
{
DestroyWindow(m_hCACMBClear);
m_hCACMBClear = NULL;
}
if ( m_hCACSwitch )
{
DestroyWindow(m_hCACSwitch);
m_hCACSwitch = NULL;
}
m_CACMBMenuDDBtnProc = NULL;
m_CACMBRecogEXBtnProc = NULL;
m_CACMBRevertEXBtnProc = NULL;
m_CACMBClearEXBtnProc = NULL;
m_CACSwitchDDBtnProc = NULL;
#if 0
m_btnMB.Destroy();
m_btnMBRecog.Destroy();
m_btnDelAll.Destroy();
m_btnMBProp.Destroy();
m_btnCAC.Destroy();
m_btnRecog.Destroy();
m_btnDel.Destroy();
m_btnDelAllCAC.Destroy();
m_btnDetail.Destroy();
m_btnLarge.Destroy();
#endif //0
return TRUE;
}
BOOL CHwxInkWindow::HandleCreate(HWND hwnd)
{
HICON hIcon;
HFONT hFont = NULL;
static DDBITEM ddbItem;
int i;
m_hwndTT = ToolTip_CreateWindow(m_hInstance,TTS_ALWAYSTIP,hwnd);
#ifdef FE_CHINESE_SIMPLIFIED
//980805:ToshiaK
//In Win95 PRC's DEFAULT_GUI_FONT glyph is little bit ugly.
//so use SYSTEM_FONT instead.
//if(TRUE) { //TEST
if(IsWin95() && m_hwndTT) {
SendMessage(m_hwndTT,
WM_SETFONT,
(WPARAM)GetStockObject(SYSTEM_FONT),
MAKELPARAM(TRUE,0));
}
#endif
m_hCACMBMenu = DDButton_CreateWindow(m_hInstance,
hwnd,
DDBS_ICON | DDBS_NOSEPARATED | DDBS_THINEDGE,
IDC_CACMBMENU,
0,
0,
BUTTON_WIDTH,
BUTTON_HEIGHT);
//----------------------------------------------------------------
//980803:ToshiaKIn PRC H/W switch view is needless
//----------------------------------------------------------------
#ifdef FE_JAPANESE
m_hCACSwitch = DDButton_CreateWindow(m_hInstance,
hwnd,
DDBS_ICON | DDBS_THINEDGE,
IDC_CACSWITCHVIEW,
0,
0,
BUTTON_WIDTH,
BUTTON_HEIGHT+4);
#elif FE_KOREAN || FE_CHINESE_SIMPLIFIED
m_hCACSwitch = NULL;
#endif
m_hCACMBRecog = EXButton_CreateWindow(m_hInstance,
hwnd,
(m_bCAC && !m_b16Bit) ?
(EXBS_TEXT | EXBS_TOGGLE |EXBS_DBLCLKS | EXBS_THINEDGE) : // kwada:980402:raid #852
(EXBS_TEXT | EXBS_THINEDGE),
IDC_CACMBRECOG,
0,
0,
BUTTON_WIDTH,
BUTTON_HEIGHT);
m_hCACMBRevert = EXButton_CreateWindow(m_hInstance,
hwnd,
EXBS_TEXT | EXBS_THINEDGE,
IDC_CACMBREVERT,
0,
0,
BUTTON_WIDTH,
BUTTON_HEIGHT);
m_hCACMBClear = EXButton_CreateWindow(m_hInstance,
hwnd,
EXBS_TEXT | EXBS_THINEDGE,
IDC_CACMBCLEAR,
0,
0,
BUTTON_WIDTH,
BUTTON_HEIGHT);
#ifdef FE_JAPANESE
if ( !m_hwndTT || !m_hCACMBMenu || !m_hCACMBRecog || !m_hCACMBRevert ||
!m_hCACMBClear || !m_hCACSwitch )
{
goto error;
}
#elif FE_KOREAN || FE_CHINESE_SIMPLIFIED
if(!m_hwndTT ||
!m_hCACMBMenu ||
!m_hCACMBRecog ||
!m_hCACMBRevert||
!m_hCACMBClear)
{
goto error;
}
#endif
#ifdef FE_JAPANESE
hIcon = (HICON)LoadImage(m_hInstance,
MAKEINTRESOURCE(IDI_HWXPAD),
IMAGE_ICON,
16,16,
LR_DEFAULTCOLOR);
#elif FE_KOREAN
hIcon = (HICON)LoadImage(m_hInstance,
MAKEINTRESOURCE(IDI_HWXPADKO),
IMAGE_ICON,
16,16,
LR_DEFAULTCOLOR);
#elif FE_CHINESE_SIMPLIFIED
hIcon = (HICON)LoadImage(m_hInstance,
MAKEINTRESOURCE(IDI_HWXPADSC),
IMAGE_ICON,
16,16,
LR_DEFAULTCOLOR);
#endif
DDButton_SetIcon(m_hCACMBMenu, hIcon);
#ifdef FE_JAPANESE
hIcon = (HICON)LoadImage(m_hInstance,
MAKEINTRESOURCE(IDI_CACSWITCHVIEW),
IMAGE_ICON,
16,16,
LR_DEFAULTCOLOR);
DDButton_SetIcon(m_hCACSwitch, hIcon);
#endif
for(i = 0; i < 2; i++)
{
ddbItem.cbSize = sizeof(ddbItem);
ddbItem.lpwstr = LoadCACMBString(IDS_CAC+i);
DDButton_AddItem(m_hCACMBMenu, &ddbItem);
#ifdef FE_JAPANESE
ddbItem.lpwstr = LoadCACMBString(IDS_CACLARGE+i);
DDButton_AddItem(m_hCACSwitch, &ddbItem);
#endif // FE_JAPANESE
}
//990716:ToshiaK for Win64.
WinSetUserPtr(m_hCACMBMenu, (LPVOID)this);
m_CACMBMenuDDBtnProc = (FARPROC)WinSetWndProc(m_hCACMBMenu,
(WNDPROC)CACMBBtnWndProc);
#ifdef FE_JAPANESE
//990810:ToshiaK for Win64
WinSetUserPtr(m_hCACSwitch, (LPVOID)this);
m_CACSwitchDDBtnProc = (FARPROC)WinSetWndProc(m_hCACSwitch,
GWL_WNDPROC,
(WNDPROC)CACMBBtnWndProc);
#endif // FE_JAPANESE
if ( m_b16Bit )
{
EnableWindow(m_hCACMBMenu,FALSE);
}
#ifdef FE_JAPANESE
DDButton_SetCurSel(m_hCACSwitch,m_pCAC->IsLargeView() ? 0 : 1);
#endif
EXButton_SetText(m_hCACMBRecog,LoadCACMBString(IDS_CACMBRECOG));
//990810:ToshiaK for Win64.
WinSetUserPtr(m_hCACMBRecog, (LPVOID)this);
m_CACMBRecogEXBtnProc = (FARPROC)WinSetWndProc(m_hCACMBRecog,
(WNDPROC)CACMBBtnWndProc);
EXButton_SetText(m_hCACMBRevert,LoadCACMBString(IDS_CACMBREVERT));
WinSetUserPtr(m_hCACMBRevert, (LPVOID)this);
m_CACMBRevertEXBtnProc = (FARPROC)WinSetWndProc(m_hCACMBRevert,
(WNDPROC)CACMBBtnWndProc);
EXButton_SetText(m_hCACMBClear,LoadCACMBString(IDS_CACMBCLEAR));
WinSetUserPtr(m_hCACMBClear, (LPVOID)this);
m_CACMBClearEXBtnProc = (FARPROC)WinSetWndProc(m_hCACMBClear,
(WNDPROC)CACMBBtnWndProc);
if ( m_bCAC )
{
exbtnPushedorPoped(m_bDblClk);
// EXButton_SetCheck(m_hCACMBRecog, m_bDblClk);
}
else
{
EnableWindow(m_hCACMBRevert,FALSE);
}
#ifdef FE_JAPANESE
//----------------------------------------------------------------
//980728: by ToshiaK for ActiveIME support
//
//----------------------------------------------------------------
//--------- Active IME support S T A R T --------------
if(MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT) != ::GetUserDefaultLangID() &&
(IsWin95() || IsWin98() || IsWinNT4())) {
//990810:ToshiaK for #1030
INT point = 9;
hFont = CFont::CreateGUIFontByNameCharSet(TEXT("MS Gothic"),
SHIFTJIS_CHARSET,
point);
if(!hFont) {
hFont = CFont::CreateGUIFontByNameCharSet(TEXT("MS UI Gothic"),
SHIFTJIS_CHARSET,
point);
if(!hFont) {
hFont = CFont::CreateGUIFontByNameCharSet(TEXT("MS P Gothic"),
SHIFTJIS_CHARSET,
point);
}
}
}
if(hFont) {
SendMessage(m_hwndTT, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACMBMenu, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACMBRecog, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACMBRevert, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACMBClear, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACSwitch, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
//----------------------------------------------------------------
//These control copy hFont in WM_SETFONT, so hFont is needless here.
//----------------------------------------------------------------
::DeleteObject(hFont);
}
//--------- Active IME support E N D --------------
#elif FE_KOREAN
//----------------------------------------------------------------
//980728: by ToshiaK for ActiveIME support
//Korean version: CSLim
//----------------------------------------------------------------
//--------- Active IME support S T A R T --------------
if(MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT) != ::GetUserDefaultLangID() &&
(IsWin95() || IsWin98() || IsWinNT4())) {
//990810:ToshiaK for #1030
INT point = 9;
hFont = CFont::CreateGUIFontByNameCharSet(TEXT("Gulim"),
HANGUL_CHARSET,
point);
if(!hFont) {
hFont = CFont::CreateGUIFontByNameCharSet(TEXT("GulimChe"),
HANGUL_CHARSET,
point);
if(!hFont) {
hFont = CFont::CreateGUIFontByNameCharSet(TEXT("Batang"),
SHIFTJIS_CHARSET,
point);
}
}
}
if(hFont) {
SendMessage(m_hwndTT, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACMBMenu, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACMBRecog, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACMBRevert, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACMBClear, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
SendMessage(m_hCACSwitch, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
//----------------------------------------------------------------
//These control copy hFont in WM_SETFONT, so hFont is needless here.
//----------------------------------------------------------------
::DeleteObject(hFont);
}
//--------- Active IME support E N D --------------
#elif FE_CHINESE_SIMPLIFIED
//----------------------------------------------------------------
//980813:Toshiak:
//Merged PRC fix.
//In Win95 PRC's DEFAULT_GUI_FONT glyph is little bit ugly.
//so use SYSTEM_FONT instead.
//----------------------------------------------------------------
if(IsWin95()) {
SendMessage(m_hwndTT,
WM_SETFONT,
(WPARAM)GetStockObject(SYSTEM_FONT),
MAKELPARAM(TRUE,0));
SendMessage(m_hCACMBRecog,
WM_SETFONT,
(WPARAM)GetStockObject(SYSTEM_FONT),
MAKELPARAM(TRUE,0));
SendMessage(m_hCACMBRevert,
WM_SETFONT,
(WPARAM)GetStockObject(SYSTEM_FONT),
MAKELPARAM(TRUE,0));
SendMessage(m_hCACMBClear,
WM_SETFONT,
(WPARAM)GetStockObject(SYSTEM_FONT),
MAKELPARAM(TRUE,0));
}
#endif
return TRUE;
error:
Terminate();
return FALSE;
UNREFERENCED_PARAMETER(hFont);
}
void CHwxInkWindow::HandlePaint(HWND hwnd)
{
RECT rcUpdate;
RECT rcBkgnd;
if ( GetUpdateRect(hwnd,&rcUpdate,FALSE) )
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
if ( ps.fErase )
{
if ( m_bCAC )
{
rcBkgnd.left = m_wCACWidth - 4 - BUTTON_WIDTH;
rcBkgnd.top = 0;
rcBkgnd.right = rcBkgnd.left + 4 + BUTTON_WIDTH + 3*Box_Border;
rcBkgnd.bottom = m_wCACHeight;
#ifndef UNDER_CE
FillRect(hdc,&rcBkgnd,(HBRUSH)(COLOR_3DFACE+1));
#else // UNDER_CE
FillRect(hdc,&rcBkgnd,GetSysColorBrush(COLOR_3DFACE));
#endif // UNDER_CE
}
else
{
rcBkgnd.left = m_wInkWidth - 4 - BUTTON_WIDTH;
rcBkgnd.top = 0;
rcBkgnd.right = rcBkgnd.left + 4 + BUTTON_WIDTH + 3*Box_Border;
rcBkgnd.bottom = m_wInkHeight;
#ifndef UNDER_CE
FillRect(hdc,&rcBkgnd,(HBRUSH)(COLOR_3DFACE+1));
#else // UNDER_CE
FillRect(hdc,&rcBkgnd,GetSysColorBrush(COLOR_3DFACE));
#endif // UNDER_CE
if ( m_wPadHeight < CACMBHEIGHT_MIN )
{
rcBkgnd.left = 0;
rcBkgnd.top = m_wPadHeight;
rcBkgnd.right = m_wPadWidth;
rcBkgnd.bottom = m_wInkHeight;
#ifndef UNDER_CE
FillRect(hdc,&rcBkgnd,(HBRUSH)(COLOR_3DFACE+1));
#else // UNDER_CE
FillRect(hdc,&rcBkgnd,GetSysColorBrush(COLOR_3DFACE));
#endif // UNDER_CE
}
}
}
InvalidateRect(m_hCACMBMenu,&rcUpdate,FALSE);
UpdateWindow(m_hCACMBMenu);
InvalidateRect(m_hCACMBRecog,&rcUpdate,FALSE);
UpdateWindow(m_hCACMBRecog);
InvalidateRect(m_hCACMBRevert,&rcUpdate,FALSE);
UpdateWindow(m_hCACMBRevert);
InvalidateRect(m_hCACMBClear,&rcUpdate,FALSE);
UpdateWindow(m_hCACMBClear);
#ifdef FE_JAPANESE
if ( m_bCAC )
{
InvalidateRect(m_hCACSwitch,&rcUpdate,FALSE);
UpdateWindow(m_hCACSwitch);
}
#endif
#if 0
if ( m_b16Bit )
{
m_btnLarge.Paint(hdc,&rcUpdate);
m_btnDetail.Paint(hdc,&rcUpdate);
m_btnRecog.Paint(hdc,&rcUpdate);
m_btnDelAllCAC.Paint(hdc,&rcUpdate);
m_btnDel.Paint(hdc,&rcUpdate);
m_btnCAC.Paint(hdc,&rcUpdate);
}
else
{
if ( m_bCAC )
{
m_btnLarge.Paint(hdc,&rcUpdate);
m_btnDetail.Paint(hdc,&rcUpdate);
m_btnRecog.Paint(hdc,&rcUpdate);
m_btnDelAllCAC.Paint(hdc,&rcUpdate);
m_btnDel.Paint(hdc,&rcUpdate);
m_btnCAC.Paint(hdc,&rcUpdate);
}
else
{
m_btnMBProp.Paint(hdc,&rcUpdate);
m_btnMBRecog.Paint(hdc,&rcUpdate);
m_btnDelAll.Paint(hdc,&rcUpdate);
m_btnMB.Paint(hdc,&rcUpdate);
}
}
#endif // 0
EndPaint(hwnd,&ps);
}
}
#if 0
void CHwxInkWindow::HandleMouseEvent(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{
POINT pt;
pt.x = (short)LOWORD(lp);
pt.y = (short)HIWORD(lp);
if ( !m_b16Bit )
{
if ( m_bCAC )
{
LargeButton(msg,&pt,&m_btnLarge);
DetailButton(msg,&pt,&m_btnDetail);
RecogButton(msg,&pt,&m_btnRecog);
DelAllCACButton(msg,&pt,&m_btnDelAllCAC);
DelButton(msg,&pt,&m_btnDel);
CACButton(msg,&pt,&m_btnCAC);
}
else
{
// PropButton(msg,&pt,&m_btnMBProp);
DelAllMBButton(msg,&pt,&m_btnDelAll);
MBButton(msg,&pt,&m_btnMB);
MBRecogButton(msg,&pt,&m_btnMBRecog);
}
}
else
{
LargeButton(msg,&pt,&m_btnLarge);
DetailButton(msg,&pt,&m_btnDetail);
DelAllCACButton(msg,&pt,&m_btnDelAllCAC);
DelButton(msg,&pt,&m_btnDel);
RecogButton(msg,&pt,&m_btnRecog);
}
static MSG rmsg;
rmsg.lParam = lp;
rmsg.wParam = wp;
rmsg.message = msg;
rmsg.hwnd = hwnd;
SendMessage(m_hwndTT,TTM_RELAYEVENT,0,(LPARAM)(LPMSG)&rmsg);
}
#endif // 0
LRESULT CHwxInkWindow::HandleCommand(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch ( LOWORD(wp) )
{
case IDC_CACMBMENU:
{
switch ( HIWORD(wp) )
{
case DDBN_DROPDOWN:
ToolTip_Enable(m_hwndTT, FALSE);
DDButton_SetCurSel((HWND)lp,m_bCAC ? 0 : 1);
break;
case DDBN_CLOSEUP:
ToolTip_Enable(m_hwndTT, TRUE);
break;
case DDBN_SELCHANGE:
m_bCAC = ( 0 == DDButton_GetCurSel((HWND)lp) ) ? TRUE : FALSE;
if ( m_bCAC )
{
DWORD dwStyle;
(GetAppletPtr()->GetIImePad())->Request(GetAppletPtr(),
IMEPADREQ_GETAPPLETUISTYLE,
(WPARAM)&dwStyle,
(LPARAM)0);
dwStyle &= ~IPAWS_VERTICALFIXED;
(GetAppletPtr()->GetIImePad())->Request(GetAppletPtr(),
IMEPADREQ_SETAPPLETUISTYLE,
(WPARAM)dwStyle,
(LPARAM)0);
//----------------------------------------------------------------
//ToshiaK:980324: for #651 GPF in 16 bit
//Thest instruction will never come on 16bit application
//becaus DDBtn is Disabled. so it is safe code.
//----------------------------------------------------------------
if(!m_pMB) {
return 0;
}
//HWND hwndMB = m_pMB->GetMBWindow();
//HWND hwndCAC = m_pCAC->GetCACWindow();
m_pCAC->SetInkSize(m_wPadHeight);
SendMessage(m_pMB->GetMBWindow(), MB_WM_COPYINK, 0, 0);
SendMessage(m_pMB->GetMBWindow(), MB_WM_ERASE, 0, 0);
EnableWindow(m_pMB->GetMBWindow(),FALSE);
ShowWindow(m_pMB->GetMBWindow(),SW_HIDE);
EnableWindow(m_pCAC->GetCACWindow(),TRUE);
ShowWindow(m_pCAC->GetCACWindow(),SW_SHOW);
if ( !m_b16Bit )
EXButton_SetStyle(m_hCACMBRecog,
EXBS_TEXT | EXBS_THINEDGE | EXBS_DBLCLKS | EXBS_TOGGLE); // kwada:980402:raid #852
EnableWindow(m_hCACMBRevert,TRUE);
EnableWindow(m_hCACSwitch,TRUE);
ShowWindow(m_hCACSwitch,SW_SHOW);
m_wCACInkHeight = m_wPadHeight;
m_wCACPLVWidth = m_wCACInkHeight + m_wCACTMPWidth;
ChangeIMEPADSize(FALSE);
changeCACLayout(TRUE);
}
else
{
DWORD dwStyle;
(GetAppletPtr()->GetIImePad())->Request(GetAppletPtr(),
IMEPADREQ_GETAPPLETUISTYLE,
(WPARAM)&dwStyle,
(LPARAM)0);
dwStyle |= IPAWS_VERTICALFIXED;
(GetAppletPtr()->GetIImePad())->Request(GetAppletPtr(),
IMEPADREQ_SETAPPLETUISTYLE,
(WPARAM)dwStyle,
(LPARAM)0);
(m_pCAC->GetCACCHwxStroke())->DeleteAllStroke();
EnableWindow(m_pCAC->GetCACWindow(),FALSE);
ShowWindow(m_pCAC->GetCACWindow(),SW_HIDE);
EnableWindow(m_hCACSwitch,FALSE);
ShowWindow(m_hCACSwitch,SW_HIDE);
EnableWindow(m_hCACMBRevert,FALSE);
EXButton_SetStyle(m_hCACMBRecog,EXBS_TEXT | EXBS_THINEDGE);
EnableWindow(m_pMB->GetMBWindow(),TRUE);
ShowWindow(m_pMB->GetMBWindow(),SW_SHOW);
m_wPadHeight = m_wCACInkHeight;
m_wPadWidth = m_numBoxes * m_wPadHeight;
//----------------------------------------------------------------
//ToshiaK:980324: for #651 GPF in 16 bit
if(m_pMB) {
m_pMB->SetBoxSize((USHORT)m_wPadHeight);
}
ChangeIMEPADSize(FALSE);
changeMBLayout(TRUE);
}
if ( !m_b16Bit )
UpdateRegistry(FALSE); // recog button is recovered after style change. kwada:980402
break;
case DDBN_CLICKED:
default:
break;
}
break;
}
case IDC_CACMBRECOG:
{
switch ( HIWORD(wp) )
{
case EXBN_DOUBLECLICKED:
if ( m_bCAC && !m_b16Bit )
{
m_bDblClk = !m_bDblClk;
m_bSglClk = FALSE;
// EXButton_SetCheck((HWND)lp,m_bDblClk);
if ( m_bDblClk )
{
exbtnPushedorPoped(TRUE);
m_pCAC->recognize();
}
else
{
exbtnPushedorPoped(FALSE);
}
UpdateRegistry(TRUE); // update recog button state. kwada:980402
}
break;
case EXBN_CLICKED:
if ( m_bCAC )
{
if ( m_b16Bit )
{
m_pCAC->NoThreadRecognize(m_wCACInkHeight);
}
else
{
if ( !m_bDblClk )
{
m_bSglClk = !m_bSglClk;
if ( m_bSglClk )
{
exbtnPushedorPoped(TRUE);
m_pCAC->recognize();
}
else
{
exbtnPushedorPoped(FALSE);
}
}
else
{
exbtnPushedorPoped(TRUE);
// EXButton_SetCheck((HWND)lp,TRUE);
}
}
}
else
{
//ToshiaK:980324: for #651 GPF in 16 bit
if(m_pMB) {
SendMessage(m_pMB->GetMBWindow(), MB_WM_DETERMINE, 0, 0);
}
}
break;
case EXBN_ARMED:
case EXBN_DISARMED:
{
if ( m_bCAC && !m_b16Bit )
{
if ( m_bDblClk || m_bSglClk )
{
exbtnPushedorPoped(TRUE);
}
else
{
exbtnPushedorPoped(FALSE);
}
}
}
default:
break;
}
break;
}
case IDC_CACMBREVERT:
{
switch ( HIWORD(wp) )
{
case EXBN_CLICKED:
if ( m_bCAC )
{
m_pCAC->HandleDeleteOneStroke();
if ( m_pCAC->GetStrokeCount() == 0 && !m_bDblClk && m_bSglClk )
{
m_bSglClk = FALSE;
exbtnPushedorPoped(FALSE);
// EXButton_SetCheck(m_hCACMBRecog,m_bSglClk);
}
}
break;
case EXBN_DOUBLECLICKED:
case EXBN_ARMED:
case EXBN_DISARMED:
default:
break;
}
break;
}
case IDC_CACMBCLEAR:
{
switch ( HIWORD(wp) )
{
case EXBN_CLICKED:
if ( m_bCAC )
{
m_pCAC->HandleDeleteAllStroke();
if ( m_pCAC->GetStrokeCount() == 0 && !m_bDblClk && m_bSglClk )
{
m_bSglClk = FALSE;
exbtnPushedorPoped(FALSE);
// EXButton_SetCheck(m_hCACMBRecog,m_bSglClk);
}
}
else
{
SendMessage(m_pMB->GetMBWindow(), MB_WM_ERASE, 0, 0);
}
break;
case EXBN_DOUBLECLICKED:
case EXBN_ARMED:
case EXBN_DISARMED:
default:
break;
}
break;
}
case IDC_CACSWITCHVIEW:
{
switch ( HIWORD(wp) )
{
case DDBN_DROPDOWN:
ToolTip_Enable(m_hwndTT, FALSE);
// DDButton_SetCurSel((HWND)lp,m_pCAC->IsLargeView() ? 0 : 1);
break;
case DDBN_CLOSEUP:
ToolTip_Enable(m_hwndTT, TRUE);
break;
case DDBN_CLICKED:
case DDBN_SELCHANGE:
m_pCAC->SetLargeView((0 == DDButton_GetCurSel((HWND)lp)) ? TRUE : FALSE);
PadListView_SetStyle(m_pCAC->GetCACLVWindow(),
m_pCAC->IsLargeView() ? PLVSTYLE_ICON : PLVSTYLE_REPORT);
break;
default:
break;
}
break;
}
default:
return DefWindowProc(hwnd, msg, wp, lp);
}
return 0;
}
//----------------------------------------------------------------
//990618:ToshiaK for KOTAE #1329
//----------------------------------------------------------------
LRESULT
CHwxInkWindow::HandleSettingChange(HWND hwnd, UINT uMsg, WPARAM wp, LPARAM lp)
{
if(m_pMB) {
m_pMB->OnSettingChange(uMsg, wp, lp);
}
if(m_pCAC) {
m_pCAC->OnSettingChange(uMsg, wp, lp);
}
return 0;
UNREFERENCED_PARAMETER(hwnd);
}
void CHwxInkWindow::ChangeLayout(BOOL b)
{
if ( !m_bCAC )
changeMBLayout(b);
else
changeCACLayout(b);
}
void CHwxInkWindow::SetTooltipInfo()
{
ti.cbSize = sizeof(TOOLINFOW);
ti.uFlags = TTF_IDISHWND;
ti.hwnd = m_hInkWnd;
ti.hinst = m_hInstance;
ti.lpszText = LPSTR_TEXTCALLBACKW;
ti.uId = (UINT_PTR)m_hCACMBMenu;
SendMessage(m_hwndTT,TTM_ADDTOOLW,0,(LPARAM)(LPTOOLINFOW)&ti);
ti.uId = (UINT_PTR)m_hCACMBRecog;
SendMessage(m_hwndTT,TTM_ADDTOOLW,0,(LPARAM)(LPTOOLINFOW)&ti);
ti.uId = (UINT_PTR)m_hCACMBRevert;
SendMessage(m_hwndTT,TTM_ADDTOOLW,0,(LPARAM)(LPTOOLINFOW)&ti);
ti.uId = (UINT_PTR)m_hCACMBClear;
SendMessage(m_hwndTT,TTM_ADDTOOLW,0,(LPARAM)(LPTOOLINFOW)&ti);
ti.uId = (UINT_PTR)m_hCACSwitch;
SendMessage(m_hwndTT,TTM_ADDTOOLW,0,(LPARAM)(LPTOOLINFOW)&ti);
}
void CHwxInkWindow::SetTooltipText(LPARAM lp)
{
LPTOOLTIPTEXTW lpttt = (LPTOOLTIPTEXTW)lp;
UINT stringID = 0;
switch ( (((LPNMHDR)lp)->idFrom) )
{
case IDC_CACMBMENU:
stringID = IDS_CACMBBTN2;
break;
case IDC_CACMBRECOG:
stringID = m_bCAC ? IDS_CACMBBTN6 : IDS_CACMBBTN1;
break;
case IDC_CACMBREVERT:
stringID = IDS_CACMBBTN3;
break;
case IDC_CACMBCLEAR:
stringID = IDS_CACMBBTN4;
break;
case IDC_CACSWITCHVIEW:
stringID = IDS_CACMBBTN5;
break;
default:
break;
}
lpttt->lpszText = stringID == 0 ? NULL : LoadCACMBString(stringID);
}
void CHwxInkWindow::CopyInkFromMBToCAC(CHwxStroke & str,long deltaX,long deltaY)
{
m_pCAC->GetInkFromMB(str,deltaX,deltaY);
}
CHwxStroke * CHwxInkWindow::GetCACCHwxStroke()
{
return m_pCAC->GetCACCHwxStroke();
}
void CHwxInkWindow::changeCACLayout(BOOL bRepaint /*bFirst*/)
{
POINT pt;
RECT rcUpdate;
// BOOL bRepaint = !bFirst;
// Recompute the layout and re-arrange the windows
// First we need to find out all the dimensions
// m_wCACWidth = m_wCACPLVWidth + 4 + BUTTON_WIDTH;
// m_wCACHeight = m_wCACInkHeight > m_wCACPLVHeight ? m_wCACInkHeight : m_wCACPLVHeight;
GetWindowRect( m_hInkWnd, &rcUpdate );
pt.x = rcUpdate.left;
pt.y = rcUpdate.top;
ScreenToClient( GetParent(m_hInkWnd), &pt );
#if 0
m_btnCAC.SetRect(m_wCACPLVWidth+8, 4,m_wCACPLVWidth+8+BUTTON_WIDTH,
4+BUTTON_HEIGHT);
m_btnRecog.SetRect(m_wCACPLVWidth+8, BUTTON_HEIGHT+4+8,
m_wCACPLVWidth+8+BUTTON_WIDTH,
2*BUTTON_HEIGHT+4+8);
m_btnDel.SetRect(m_wCACPLVWidth+8, 2*BUTTON_HEIGHT+10+4,
m_wCACPLVWidth+8+BUTTON_WIDTH,
3*BUTTON_HEIGHT+10+4);
m_btnDelAllCAC.SetRect(m_wCACPLVWidth+8, 3*BUTTON_HEIGHT+12+4,
m_wCACPLVWidth+8+BUTTON_WIDTH,
4*BUTTON_HEIGHT+12+4);
m_btnLarge.SetRect(m_wCACPLVWidth+8, 4*BUTTON_HEIGHT+18+4,
m_wCACPLVWidth+8+23,
5*BUTTON_HEIGHT+21+4);
m_btnDetail.SetRect(m_wCACPLVWidth+32, 4*BUTTON_HEIGHT+18+4,
m_wCACPLVWidth+32+12,
5*BUTTON_HEIGHT+21+4);
#endif // 0
MoveWindow( m_hInkWnd,pt.x, pt.y, m_wCACWidth+3*Box_Border, m_wCACHeight, bRepaint);
MoveWindow( m_pCAC->GetCACWindow(), 0, 0, m_wCACPLVWidth, m_wCACHeight, bRepaint);
MoveWindow( m_pCAC->GetCACLVWindow(),m_wCACInkHeight+5, 4, m_wCACTMPWidth-4, m_wCACPLVHeight-8, bRepaint);
MoveWindow( m_hCACMBMenu,m_wCACPLVWidth+8, 4,
BUTTON_WIDTH,
BUTTON_HEIGHT,bRepaint);
MoveWindow( m_hCACMBRecog,m_wCACPLVWidth+8, BUTTON_HEIGHT+4+8,
BUTTON_WIDTH,
BUTTON_HEIGHT,bRepaint);
MoveWindow( m_hCACMBRevert,m_wCACPLVWidth+8, 2*BUTTON_HEIGHT+10+4,
BUTTON_WIDTH,
BUTTON_HEIGHT,bRepaint);
MoveWindow( m_hCACMBClear,m_wCACPLVWidth+8, 3*BUTTON_HEIGHT+12+4,
BUTTON_WIDTH,
BUTTON_HEIGHT,bRepaint);
#ifdef FE_JAPANESE
MoveWindow( m_hCACSwitch,m_wCACPLVWidth+8, 4*BUTTON_HEIGHT+18+4,
BUTTON_WIDTH,
BUTTON_HEIGHT+4,bRepaint);
#endif
//----------------------------------------------------------------
//990810:ToshiaK for KOTAE #1609
//fixed control repaint problem.
//To fix perfectly, We should use Begin(End)DeferWindowPos(),
//SetWindwPos() to re-layout.
//But there are many part to change the code.
//So, I only add following line to repaint again.
//----------------------------------------------------------------
if(m_hCACMBMenu) {
::InvalidateRect(m_hCACMBMenu, NULL, NULL);
}
if(m_hCACMBRecog) {
::InvalidateRect(m_hCACMBRecog, NULL, NULL);
}
if(m_hCACMBRevert) {
::InvalidateRect(m_hCACMBRevert,NULL, NULL);
}
if(m_hCACMBClear) {
::InvalidateRect(m_hCACMBClear, NULL, NULL);
}
#ifdef FE_JAPANESE
if(m_hCACSwitch) {
::InvalidateRect(m_hCACSwitch, NULL, NULL);
}
#endif
}
void CHwxInkWindow::changeMBLayout(BOOL bRepaint /*bFirst*/)
{
POINT pt;
RECT rcUpdate;
// BOOL bRepaint = !bFirst;
// Recompute the layout and re-arrange the windows
// First we need to find out all the dimensions
// m_wInkWidth = m_wPadWidth + 4+ BUTTON_WIDTH;
// m_wInkHeight = m_wPadHeight > PadWnd_Height ? m_wPadHeight : PadWnd_Height;
GetWindowRect( m_hInkWnd, &rcUpdate );
pt.x = rcUpdate.left;
pt.y = rcUpdate.top;
ScreenToClient( GetParent(m_hInkWnd), &pt );
#if 0
m_btnMB.SetRect(m_wPadWidth+8, 4,m_wPadWidth+8+BUTTON_WIDTH,
4+BUTTON_HEIGHT);
m_btnMBRecog.SetRect(m_wPadWidth+8, BUTTON_HEIGHT+4+8,
m_wPadWidth+8+BUTTON_WIDTH,
2*BUTTON_HEIGHT+4+8);
m_btnDelAll.SetRect(m_wPadWidth+8, 3*BUTTON_HEIGHT+12+4,
m_wPadWidth+8+BUTTON_WIDTH,
4*BUTTON_HEIGHT+12+4);
m_btnMBProp.SetRect(m_wPadWidth+8, 2*BUTTON_HEIGHT+10+4,
m_wPadWidth+8+BUTTON_WIDTH,
3*BUTTON_HEIGHT+10+4);
#endif // 0
MoveWindow( m_hInkWnd, pt.x, pt.y, m_wInkWidth+3*Box_Border, m_wInkHeight, bRepaint);
if(m_pMB) {
MoveWindow( m_pMB->GetMBWindow(), 0, 0, m_wPadWidth, m_wPadHeight, bRepaint);
}
MoveWindow( m_hCACMBMenu,m_wPadWidth+8, 4,
BUTTON_WIDTH,
BUTTON_HEIGHT,bRepaint);
MoveWindow( m_hCACMBRecog,m_wPadWidth+8, BUTTON_HEIGHT+4+8,
BUTTON_WIDTH,
BUTTON_HEIGHT,bRepaint);
MoveWindow( m_hCACMBRevert,m_wPadWidth+8, 2*BUTTON_HEIGHT+10+4,
BUTTON_WIDTH,
BUTTON_HEIGHT,bRepaint);
MoveWindow( m_hCACMBClear,m_wPadWidth+8, 3*BUTTON_HEIGHT+12+4,
BUTTON_WIDTH,
BUTTON_HEIGHT,bRepaint);
//----------------------------------------------------------------
//990810:ToshiaK for KOTAE #1609
//fixed control repaint problem.
//To fix perfectly, We should use Begin(End)DeferWindowPos(),
//SetWindwPos() to re-layout.
//But there are many part to change the code.
//So, I only add following line to repaint again.
//----------------------------------------------------------------
//990810:ToshiaK.
//In resizing, sometime "WPad" window is not redrawn..
if(m_pMB) {
::InvalidateRect(m_pMB->GetMBWindow(), NULL, NULL);
}
if(m_hCACMBMenu) {
::InvalidateRect(m_hCACMBMenu, NULL, NULL);
}
if(m_hCACMBRecog) {
::InvalidateRect(m_hCACMBRecog, NULL, NULL);
}
if(m_hCACMBRevert) {
::InvalidateRect(m_hCACMBRevert,NULL, NULL);
}
if(m_hCACMBClear) {
::InvalidateRect(m_hCACMBClear, NULL, NULL);
}
}
#if 0
void CHwxInkWindow::clearCACLayout()
{
m_btnCAC.SetRect(0,0,0,0);
m_btnRecog.SetRect(0,0,0,0);
m_btnDel.SetRect(0,0,0,0);
m_btnDelAllCAC.SetRect(0,0,0,0);
m_btnLarge.SetRect(0,0,0,0);
m_btnDetail.SetRect(0,0,0,0);
}
void CHwxInkWindow::clearMBLayout()
{
m_btnMB.SetRect(0,0,0,0);
m_btnMBRecog.SetRect(0,0,0,0);
m_btnDelAll.SetRect(0,0,0,0);
m_btnMBProp.SetRect(0,0,0,0);
m_btnMB.SetRect(0,0,0,0);
}
#endif // 0
void CHwxInkWindow::DrawHwxGuide(HDC hDC, LPRECT prc)
{
HPEN hPen,hPenOld;
RECT rcUpdate = *prc;
hPen = CreatePen( PS_SOLID, 0, GetSysColor(COLOR_3DSHADOW) );
hPenOld = (HPEN)SelectObject( hDC, hPen );
#define DXW 10
// center cross
#ifndef UNDER_CE // Windows CE does not support MoveToEx/LineTo. Use Polyline.
// MoveToEx( hDC, rcUpdate.right/2-DXW, rcUpdate.bottom/2, NULL );
// LineTo( hDC, rcUpdate.right/2+DXW, rcUpdate.bottom/2 );
// MoveToEx( hDC, rcUpdate.right/2, rcUpdate.bottom/2-DXW, NULL );
// LineTo( hDC, rcUpdate.right/2, rcUpdate.bottom/2+DXW );
MoveToEx( hDC, ( rcUpdate.left + (rcUpdate.right-rcUpdate.left)/2 )-DXW, rcUpdate.bottom/2, NULL );
LineTo( hDC, ( rcUpdate.left + (rcUpdate.right-rcUpdate.left)/2 )+DXW, rcUpdate.bottom/2 );
MoveToEx( hDC, ( rcUpdate.left + (rcUpdate.right-rcUpdate.left)/2 ), rcUpdate.bottom/2-DXW, NULL );
LineTo( hDC, ( rcUpdate.left + (rcUpdate.right-rcUpdate.left)/2 ), rcUpdate.bottom/2+DXW );
#else // UNDER_CE
{
POINT pts[] ={{(rcUpdate.left + (rcUpdate.right-rcUpdate.left)/2)-DXW, rcUpdate.bottom/2},
{(rcUpdate.left + (rcUpdate.right-rcUpdate.left)/2)+DXW, rcUpdate.bottom/2}};
Polyline(hDC, pts, ArrayCount(pts));
}
{
POINT pts[] ={{(rcUpdate.left + (rcUpdate.right-rcUpdate.left)/2), rcUpdate.bottom/2-DXW},
{(rcUpdate.left + (rcUpdate.right-rcUpdate.left)/2), rcUpdate.bottom/2+DXW}};
Polyline(hDC, pts, ArrayCount(pts));
}
#endif // UNDER_CE
// top left
#ifndef UNDER_CE // Windows CE does not support MoveToEx/LineTo. Use Polyline.
MoveToEx( hDC, rcUpdate.left+DXW, rcUpdate.top+DXW, NULL );
LineTo( hDC, rcUpdate.left+DXW, rcUpdate.top+(DXW+DXW) );
MoveToEx( hDC, rcUpdate.left+DXW, rcUpdate.top+DXW, NULL );
LineTo( hDC, rcUpdate.left+(DXW+DXW), rcUpdate.top+DXW );
#else // UNDER_CE
{
POINT pts[] ={{rcUpdate.left+(DXW+DXW), rcUpdate.top+DXW},
{rcUpdate.left+DXW, rcUpdate.top+DXW},
{rcUpdate.left+DXW, rcUpdate.top+(DXW+DXW)}};
Polyline(hDC, pts, ArrayCount(pts));
}
#endif // UNDER_CE
// bottom left
#ifndef UNDER_CE // Windows CE does not support MoveToEx/LineTo. Use Polyline.
MoveToEx( hDC, rcUpdate.left+DXW, rcUpdate.bottom-DXW, NULL );
LineTo( hDC, rcUpdate.left+DXW, rcUpdate.bottom-(DXW+DXW) );
MoveToEx( hDC, rcUpdate.left+DXW, rcUpdate.bottom-DXW, NULL );
LineTo( hDC, rcUpdate.left+(DXW+DXW), rcUpdate.bottom-DXW );
#else // UNDER_CE
{
POINT pts[] ={{rcUpdate.left+DXW, rcUpdate.bottom-(DXW+DXW)},
{rcUpdate.left+DXW, rcUpdate.bottom-DXW},
{rcUpdate.left+(DXW+DXW), rcUpdate.bottom-DXW}};
Polyline(hDC, pts, ArrayCount(pts));
}
#endif // UNDER_CE
// top right
#ifndef UNDER_CE // Windows CE does not support MoveToEx/LineTo. Use Polyline.
MoveToEx( hDC, rcUpdate.right-DXW, rcUpdate.top+DXW, NULL );
LineTo( hDC, rcUpdate.right-DXW, rcUpdate.top+(DXW+DXW) );
MoveToEx( hDC, rcUpdate.right-DXW, rcUpdate.top+DXW, NULL );
LineTo( hDC, rcUpdate.right-(DXW+DXW), rcUpdate.top+DXW );
#else // UNDER_CE
{
POINT pts[] ={{rcUpdate.right-(DXW+DXW), rcUpdate.top+DXW},
{rcUpdate.right-DXW, rcUpdate.top+DXW},
{rcUpdate.right-DXW, rcUpdate.top+(DXW+DXW)}};
Polyline(hDC, pts, ArrayCount(pts));
}
#endif // UNDER_CE
// bottom right
#ifndef UNDER_CE // Windows CE does not support MoveToEx/LineTo. Use Polyline.
MoveToEx( hDC, rcUpdate.right-DXW, rcUpdate.bottom-DXW, NULL );
LineTo( hDC, rcUpdate.right-DXW, rcUpdate.bottom-(DXW+DXW) );
MoveToEx( hDC, rcUpdate.right-DXW, rcUpdate.bottom-DXW, NULL );
LineTo( hDC, rcUpdate.right-(DXW+DXW), rcUpdate.bottom-DXW );
#else // UNDER_CE
{
POINT pts[] ={{rcUpdate.right-(DXW+DXW), rcUpdate.bottom-DXW},
{rcUpdate.right-DXW, rcUpdate.bottom-DXW},
{rcUpdate.right-DXW, rcUpdate.bottom-(DXW+DXW)}};
Polyline(hDC, pts, ArrayCount(pts));
}
#endif // UNDER_CE
SelectObject( hDC, hPenOld );
DeleteObject( hPen );
}
// applet size changing
// inkbox size should remain unchanged
// both MB inkbox and CAC inkbox should be the same
void CHwxInkWindow::HandleSize(WPARAM wp, LPARAM lp)
{
Dbg(("CHwxInkWindow::HandleSize\n"));
int w = LOWORD(lp);
int h = HIWORD(lp);
int wdefaultSize;
int hdefaultSize;
int newWidth,newHeight;
BOOL bChanged = FALSE;
if ( m_bCAC )
{
if ( !w )
{
wdefaultSize = PadWnd_Height + 150 + (3*Box_Border) + (4+BUTTON_WIDTH);
// wdefaultSize = PadWnd_Height + 120 + (3*Box_Border) + (4+BUTTON_WIDTH);
}
else
{
wdefaultSize = m_wCACInkHeight + LISTVIEWWIDTH_MIN + (3*Box_Border) + (4+BUTTON_WIDTH); // minimum width
}
// hdefaultSize = PadWnd_Height; // minimum height
hdefaultSize = m_wCACInkHeight > CACMBHEIGHT_MIN ? m_wCACInkHeight : CACMBHEIGHT_MIN;
newWidth = w > wdefaultSize ? w : wdefaultSize;
newHeight = h > hdefaultSize ? h : hdefaultSize;
if ( newWidth != m_wCACWidth || newHeight != m_wCACHeight )
{
m_wCACPLVWidth = newWidth - (3*Box_Border) - (4+BUTTON_WIDTH);
m_wCACTMPWidth = m_wCACPLVWidth - m_wCACInkHeight;
m_wCACPLVHeight = newHeight;
m_pCAC->SetInkSize(m_wCACInkHeight);
m_wCACWidth = m_wCACPLVWidth + 4 + BUTTON_WIDTH;
m_wCACHeight = m_wCACInkHeight > m_wCACPLVHeight ? m_wCACInkHeight : m_wCACPLVHeight;
ChangeIMEPADSize(FALSE);
changeCACLayout(TRUE);
// changeCACLayout(FALSE);
// SetTooltipInfo(m_hInkWnd,FALSE);
}
}
else
{
wdefaultSize = (m_numBoxes * INKBOXSIZE_MIN) + (3*Box_Border) + (4+BUTTON_WIDTH);
hdefaultSize = PadWnd_Height;
// 0. decide if we need to resize
// 1. need to decide ink-box size and numbers of boxes
// m_wPadHeight, m_numBoxes, and m_wPadWidth
// 2. notify m_boxSize in CHwxMB
// 3. scale the ink if there is the ink before resizing
newWidth = w > wdefaultSize ? w : wdefaultSize;
newHeight = h > hdefaultSize ? h : hdefaultSize;
int wInkWidth = m_wPadWidth + (3*Box_Border) + (4+BUTTON_WIDTH);
int wInkHeight = m_wPadHeight;
int num;
if ( newWidth != wInkWidth && newHeight == wInkHeight )
{
m_numBoxes = ((num = (newWidth- (3*Box_Border) - (4+BUTTON_WIDTH)) / m_wInkHeight) && num > 1) ? num : 2;
m_wPadWidth = m_numBoxes * m_wInkHeight;
bChanged = TRUE;
}
if ( newWidth == wInkWidth && newHeight != wInkHeight )
{
//----------------------------------------------------------------
//990723:ToshiaK for KOTAE #1615.
//Raid Description:
// Try to decrease the number of boxes by dragging the left edge to the right.
// Result: You can't decrease the number of boxes. (You can add more boxes, though.)
//This is VERY VERY UGLY CODE.
//Too many auto variable, and not intuitive....
//Anyway, if box size is minimize, it's in to this condition.
//----------------------------------------------------------------
//1. First calc m_numBoxes.
m_numBoxes = ((num = (newWidth- (3*Box_Border) - (4+BUTTON_WIDTH)) / m_wInkHeight) && num > 1) ? num : 2;
//2. calc new m_wPadWidth
m_wPadWidth = m_numBoxes * m_wInkHeight;
//3. LiZhang use too many magic number, I cannot understand...
// compare real width(WM_SIZE parameter width)
// and computed width.
// Real Applet's size seems to compute like this.
// "m_wPadWidth + 3*Box_Border + 4 + BUTTON_WIDTH" :-(
//
if( (m_wPadWidth + 3*Box_Border+ 4+ BUTTON_WIDTH) > w && m_numBoxes > 2) {
if(m_wPadWidth > 0) {
m_numBoxes = (w - (3*Box_Border+ 4+ BUTTON_WIDTH))/m_wInkHeight;
if(m_numBoxes < 2) {
m_numBoxes = 2;
}
}
m_wPadWidth = m_numBoxes * m_wInkHeight;
}
Dbg((" --> new m_numBoxes [%d]\n", m_numBoxes));
Dbg((" --> new m_wPadWidth[%d]\n", m_wPadWidth));
bChanged = TRUE;
}
if ( newWidth != wInkWidth && newHeight != wInkHeight )
{
newWidth = newWidth - (3*Box_Border) - (4+BUTTON_WIDTH);
m_numBoxes = ((num = newWidth / m_wPadHeight) && num > 1) ? num : 2;
m_wPadWidth = m_numBoxes * m_wPadHeight;
bChanged = TRUE;
}
if ( bChanged )
{
if(m_pMB) { //ToshiaK:980324
m_pMB->SetBoxSize((USHORT)m_wPadHeight);
}
m_wInkWidth = m_wPadWidth + 4+ BUTTON_WIDTH;
m_wInkHeight = m_wPadHeight > CACMBHEIGHT_MIN ? m_wPadHeight : CACMBHEIGHT_MIN;
ChangeIMEPADSize(FALSE);
changeMBLayout(TRUE);
}
}
Unref(wp);
}
//////////////////////////////////////////////////////////////////
// Function : CHwxInkWindow::HandleSizeNotify
// Type : BOOL
// Purpose : check *pWidth, *pHeight, these are proper size or not.
// Args :
// : INT * pWidth [in/out] new width comes
// : INT * pHeight [in/out] new height comes
// Return :
// DATE : Fri Jun 05 20:42:02 1998
// Author : ToshiaK
//////////////////////////////////////////////////////////////////
BOOL CHwxInkWindow::HandleSizeNotify(INT *pWidth, INT *pHeight)
{
Dbg(("HandleSizeNotify *pWidth[%d] *pHeight[%d]\n", *pWidth, *pHeight));
if(!pWidth || !pHeight) {
return FALSE;
}
int w = *pWidth;
int h = *pHeight;
int wdefaultSize;
int hdefaultSize;
if ( m_bCAC )
{
if ( !w )
{
wdefaultSize = PadWnd_Height + 150 + (3*Box_Border) + (4+BUTTON_WIDTH);
// wdefaultSize = PadWnd_Height + 120 + (3*Box_Border) + (4+BUTTON_WIDTH);
}
else
{
wdefaultSize = m_wCACInkHeight + LISTVIEWWIDTH_MIN + (3*Box_Border) + (4+BUTTON_WIDTH); // minimum width
}
hdefaultSize = m_wCACInkHeight > CACMBHEIGHT_MIN ? m_wCACInkHeight : CACMBHEIGHT_MIN;
//----------------------------------------------------------------
//980903:for #4892. if new size is less than default size, set default.
//----------------------------------------------------------------
if(*pWidth < wdefaultSize) {
*pWidth = wdefaultSize;
}
if(*pHeight < hdefaultSize) {
*pHeight = hdefaultSize;
}
return TRUE;
}
else
{
Dbg(("Multibox size changing\n"));
wdefaultSize = (m_numBoxes * INKBOXSIZE_MIN) + (3*Box_Border) + (4+BUTTON_WIDTH);
hdefaultSize = PadWnd_Height;
Dbg(("w[%d] h[%d] wdef[%d] hdef[%d]\n", w, h, wdefaultSize, hdefaultSize));
Dbg(("m_wPadWidth[%d] m_wPadHeight[%d]\n", m_wPadWidth, m_wPadHeight));
//----------------------------------------------------------------
//980903:for #4892
//check num box with new size.
//Ink with & height is same.
//----------------------------------------------------------------
if(m_wInkHeight > 0) { //check to prevent Div0.
//Calc new numbox from new Width. InkHeight is not changed.
INT numBox = (*pWidth - (3*Box_Border)-(4+BUTTON_WIDTH))/ m_wInkHeight;
//check Smooth Drag or only Frame drag flag.
BOOL fDragFull=FALSE;
#ifndef UNDER_CE // Windows CE does not support SPI_GETDRAGFULLWINDOWS
::SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, &fDragFull, 0);
#endif // UNDER_CE
if(fDragFull) {
//Do not change multibox size if numBox is same as old value.
if(numBox < 2 || numBox == m_numBoxes) {
return FALSE;
}
}
else {
if(numBox < 2) { //Box count should be greater than 1
*pWidth = 2 * m_wInkHeight + (3*Box_Border)+(4+BUTTON_WIDTH);
}
if(m_wPadHeight != h) {
*pHeight = m_wPadHeight;
}
}
}
return TRUE;
}
//return TRUE;
}
#if 0
void CHwxInkWindow::HandleTimer()
{
if ( m_dwBtnUpCount == 1 ) // single click detected
{
if ( !m_bDblClk )
{
SetSglClk(!m_bSglClk);
if ( m_bSglClk )
m_pCAC->recognize();
}
}
m_wCurrentCtrlID = 0; // no control selected
}
#endif // 0
void CHwxInkWindow::SetMBHeight(int h)
{
// h = h > m_wMaxHeight? m_wMaxHeight : h;
m_wPadHeight = h;
m_wCACInkHeight = h;
m_wPadWidth = m_numBoxes * m_wPadHeight;
m_pCAC->SetInkSize(h);
if(m_pMB) { //ToshiaK:980324
m_pMB->SetBoxSize((USHORT)h);
}
m_wInkWidth = m_wPadWidth + 4 + BUTTON_WIDTH;
m_wInkHeight = m_wPadHeight > CACMBHEIGHT_MIN ? m_wPadHeight : CACMBHEIGHT_MIN;
}
void CHwxInkWindow::SetCACInkHeight(int w)
{
// w = w > m_wMaxHeight? m_wMaxHeight : w;
m_wCACInkHeight = w;
m_wCACPLVWidth = m_wCACTMPWidth + m_wCACInkHeight;
m_wPadHeight = m_wCACInkHeight;
m_pCAC->SetInkSize(w);
if(m_pMB) { //ToshiaK:980324
m_pMB->SetBoxSize((USHORT)w);
}
m_wCACWidth = m_wCACPLVWidth + 4 + BUTTON_WIDTH;
m_wCACHeight = m_wCACInkHeight > m_wCACPLVHeight ? m_wCACInkHeight : m_wCACPLVHeight;
}
void CHwxInkWindow::HandleConfigNotification()
{
LANGID langId;
//----------------------------------------------------------------
//980803:ToshiaK
//If environment is ActiveIME,
//Invoke Dialog with English string.
//----------------------------------------------------------------
if(CHwxFE::IsActiveIMEEnv()) {
langId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
}
else {
langId = CHwxFE::GetAppLangID();
}
if ( !m_b16Bit ) {
if(IsNT()) {
CExres::DialogBoxParamW(langId,
m_hInstance,
MAKEINTRESOURCEW(IDD_MBPROP),
m_hInkWnd,
CACMBPropDlgProc,
(LPARAM)this);
}
else {
#ifndef UNDER_CE // Windows CE always Unicode
CExres::DialogBoxParamA(langId,
m_hInstance,
MAKEINTRESOURCEA(IDD_MBPROP),
m_hInkWnd,
CACMBPropDlgProc,
(LPARAM)this);
#endif // UNDER_CE
}
}
}
void CHwxInkWindow::UpdateRegistry(BOOL bSet)
{
static PROPDATA pd;
if ( !m_b16Bit ) // kwada:980402
if ( bSet )
{
pd.uTimerValue = m_pMB->GetTimeOutValue();
pd.bAlwaysRecog = m_bDblClk;
(GetAppletPtr()->GetIImePad())->Request(GetAppletPtr(),IMEPADREQ_SETAPPLETDATA,(WPARAM)&pd,(LPARAM)sizeof(PROPDATA));
}
else
{
ZeroMemory(&pd, sizeof(pd)); //ToshiaK:971024
if ( S_FALSE == (GetAppletPtr()->GetIImePad())->Request(GetAppletPtr(),IMEPADREQ_GETAPPLETDATA,(WPARAM)&pd,(LPARAM)sizeof(PROPDATA) ) )
{
//980921:for Raid#4981
pd.uTimerValue = 2000; //Wait 2000msec
pd.bAlwaysRecog = TRUE;
(GetAppletPtr()->GetIImePad())->Request(GetAppletPtr(),IMEPADREQ_SETAPPLETDATA,(WPARAM)&pd,(LPARAM)sizeof(PROPDATA));
}
m_pMB->SetTimeOutValue(pd.uTimerValue);
m_pMB->SetTimerStarted(pd.uTimerValue ? TRUE : FALSE );
SetDblClk(pd.bAlwaysRecog);
}
}
void CHwxInkWindow::HandleDlgMsg(HWND hdlg,BOOL bInit)
{
LANGID langId;
INT codePage;
//980803:ToshiaK for ActiveIME
if(CHwxFE::IsActiveIMEEnv()) {
langId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
codePage = CP_ACP;
}
else {
langId = CHwxFE::GetAppLangID();
codePage = CHwxFE::GetAppCodePage();
}
int index;
if ( bInit )
{
#ifndef UNDER_CE // Windows CE always Unicode
if(::IsWindowUnicode(hdlg)) {
#endif // UNDER_CE
for ( int i = 0; i < 11; i++) {
CExres::LoadStringW(langId,
m_hInstance,
IDS_TIMER0+i,
wszBuf,
sizeof(wszBuf)/sizeof(wszBuf[0]));
::SendMessageW(::GetDlgItem(hdlg,IDC_MBCOMBO),CB_ADDSTRING,0,(LPARAM)wszBuf);
}
::SendMessageW(::GetDlgItem(hdlg,IDC_CACCHECK),BM_SETCHECK, m_bDblClk,0);
UpdateRegistry(TRUE); // update recog button state. kwada:980402
if(m_pMB) { //ToshiaK:980324
::SendMessageW(GetDlgItem(hdlg,IDC_MBCOMBO),CB_SETCURSEL,
(WPARAM)(m_pMB->GetTimeOutValue()/1000),0);
}
#ifndef UNDER_CE // Windows CE always Unicode
}
else {
for ( int i = 0; i < 11; i++) {
CExres::LoadStringA(codePage,
langId,
m_hInstance,
IDS_TIMER0+i,
szBuf,
sizeof(szBuf)/sizeof(TCHAR));
SendMessage(GetDlgItem(hdlg,IDC_MBCOMBO),CB_ADDSTRING,0,(LPARAM)szBuf);
}
SendMessage(GetDlgItem(hdlg,IDC_CACCHECK),BM_SETCHECK,m_bDblClk,0);
UpdateRegistry(TRUE); // update recog button state. kwada:980402
if(m_pMB) { //ToshiaK:980324
SendMessage(GetDlgItem(hdlg,IDC_MBCOMBO),CB_SETCURSEL,
(WPARAM)(m_pMB->GetTimeOutValue()/1000),0);
}
}
#endif // UNDER_CE
}
else
{
#ifndef UNDER_CE // Windows CE always Unicode
if(::IsWindowUnicode(hdlg)) {
#endif // UNDER_CE
index = ::SendMessageW(::GetDlgItem(hdlg,IDC_MBCOMBO),CB_GETCURSEL,0,0);
if ( index != CB_ERR ) {
index *= 1000;
if(m_pMB) { //ToshiaK:980324
m_pMB->SetTimeOutValue(index);
m_pMB->SetTimerStarted(index ? TRUE : FALSE);
}
m_bDblClk = (BOOL)::SendMessageW(GetDlgItem(hdlg,IDC_CACCHECK),BM_GETCHECK,0,0);
SetDblClk(m_bDblClk);
UpdateRegistry(TRUE);
}
#ifndef UNDER_CE // Windows CE always Unicode
}
else {
index = SendMessage(GetDlgItem(hdlg,IDC_MBCOMBO),CB_GETCURSEL,0,0);
if ( index != CB_ERR ) {
index *= 1000;
if(m_pMB) { //ToshiaK:980324
m_pMB->SetTimeOutValue(index);
m_pMB->SetTimerStarted(index ? TRUE : FALSE);
}
m_bDblClk = (BOOL)SendMessage(GetDlgItem(hdlg,IDC_CACCHECK),BM_GETCHECK,0,0);
SetDblClk(m_bDblClk);
UpdateRegistry(TRUE);
}
}
#endif // UNDER_CE
}
}
void CHwxInkWindow::ChangeIMEPADSize(BOOL bChangePos)
{
Dbg(("CHwxInkWindow::ChangeIMEPADSize START bChangePos %d\n", bChangePos));
int w;
int h;
if ( m_bCAC )
{
w = m_wCACWidth+3*Box_Border;
h = m_wCACHeight;
}
else
{
Dbg(("for multibox\n"));
w = m_wInkWidth+3*Box_Border;
h = m_wInkHeight;
}
(GetAppletPtr()->GetIImePad())->Request(GetAppletPtr(),
IMEPADREQ_SETAPPLETSIZE,
MAKEWPARAM(w,h),
(LPARAM)bChangePos);
}
void CHwxInkWindow::HandleHelp(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{
#ifndef UNDER_CE // Windows CE does not support WinHelp
LPHELPINFO lpInfo = (LPHELPINFO)lp;
Dbg(("CHwxInkWindow::HandleHelp() msg[%s]START\n",
msg == WM_HELP ? "WM_HELP" :
msg == WM_CONTEXTMENU ? "WM_CONTEXTMENU" : "unknown"));
if ( msg == WM_HELP )
{
Dbg(("hwnd [0x%08x][%s]\n", hwnd, DBGGetWinClass(hwnd)));
Dbg(("hItemHandle [0x%08x][%s]\n", lpInfo->hItemHandle,
DBGGetWinClass((HWND)lpInfo->hItemHandle)));
Dbg(("m_hInkWnd [0x%08x][%s]\n", m_hInkWnd, DBGGetWinClass(m_hInkWnd)));
#ifdef _DEBUG
if(m_pCAC) {
Dbg(("GetCACWindow [0x%08x][%s]\n",
m_pCAC->GetCACWindow(),
DBGGetWinClass(m_pCAC->GetCACWindow())));
}
if(m_pMB) {
Dbg(("GetMBWindow [0x%08x][%s]\n",
m_pMB->GetMBWindow(),
DBGGetWinClass(m_pMB->GetMBWindow())));
}
#endif
if ( m_bCAC && lpInfo->hItemHandle == m_pCAC->GetCACWindow() )
{
CHwxFE::HandleWmHelp((HWND)lpInfo->hItemHandle, TRUE);
}
else if ( !m_bCAC && m_pMB && lpInfo->hItemHandle == m_pMB->GetMBWindow() )
{
CHwxFE::HandleWmHelp((HWND)lpInfo->hItemHandle, FALSE);
}
else if ( lpInfo->hItemHandle != m_hInkWnd )
{
CHwxFE::HandleWmHelp((HWND)lpInfo->hItemHandle, (BOOL)m_bCAC);
}
}
else if ( msg == WM_CONTEXTMENU )
{
if (( m_bCAC && (HWND)wp == m_pCAC->GetCACWindow() )
|| ( !m_bCAC && m_pMB && (HWND)wp == m_pMB->GetMBWindow() )
|| ( (HWND)wp != m_hInkWnd ))
{
CHwxFE::HandleWmContextMenu((HWND)wp, (BOOL)m_bCAC);
}
}
#endif // UNDER_CE
Unref(hwnd);
}
LRESULT CHwxInkWindow::HandleBtnSubWnd(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{
static FARPROC fn;
static MSG rmsg;
//981006:In 16bit appliatioin,
//hwnd's hiword is 0. so cannot specified the hwnd
if(m_bNT && CHwxFE::Is16bitApplication()) {
INT id = GetDlgCtrlID(hwnd);
switch(id) {
case IDC_CACMBMENU:
fn = m_CACMBMenuDDBtnProc;
break;
case IDC_CACSWITCHVIEW:
fn = m_CACSwitchDDBtnProc;
break;
case IDC_CACMBRECOG:
fn = m_CACMBRecogEXBtnProc;
break;
case IDC_CACMBREVERT:
fn = m_CACMBRevertEXBtnProc;
break;
case IDC_CACMBCLEAR:
fn = m_CACMBClearEXBtnProc;
break;
default:
fn = NULL;
break;
}
if(NULL == fn) {
return 0;
}
}
else {
if ( NULL == (fn = getCACMBBtnProc(hwnd)) )
return 0;
}
switch(msg)
{
case WM_MOUSEMOVE:
// case WM_LBUTTONDOWN:
// case WM_LBUTTONUP:
rmsg.lParam = lp;
rmsg.wParam = wp;
rmsg.message = msg;
rmsg.hwnd = hwnd;
SendMessage(m_hwndTT,TTM_RELAYEVENT,0,(LPARAM)(LPMSG)&rmsg);
break;
case WM_LBUTTONDOWN:
m_bMouseDown = TRUE;
break;
case WM_LBUTTONUP:
case WM_LBUTTONDBLCLK:
m_bMouseDown = FALSE;
break;
case WM_DESTROY:
if( m_hwndTT )
{
ti.cbSize = sizeof(TOOLINFOW);
ti.uFlags = TTF_IDISHWND;
ti.hwnd = m_hInkWnd;
ti.uId = (UINT_PTR)hwnd;
SendMessage(m_hwndTT,TTM_DELTOOLW,0,(LPARAM)(LPTOOLINFOW)&ti);
}
//990810:ToshiaK for Win64
WinSetUserPtr(hwnd, (LPVOID)NULL);
break;
default:
break;
}
return CallWindowProc((WNDPROC)fn, hwnd, msg, wp, lp);
}
LPWSTR CHwxInkWindow::LoadCACMBString(UINT idStr)
{
static WCHAR wchStr[60];
ZeroMemory(wchStr, sizeof(wchStr));
CHwxFE::LoadStrWithLangId(CHwxFE::GetAppLangID(),
m_hInstance,
idStr,
wchStr,
sizeof(wchStr)/sizeof(WCHAR));
return wchStr;
}
// this is a special function to handle m_hCACMBRecog
// button drawing(pushed or poped) in CAC mode only(not 16bit app)
void CHwxInkWindow::exbtnPushedorPoped(BOOL bPushed)
{
#ifndef UNDER_CE // Windows CE does not support GetCursorPos
POINT pt;
RECT rcUpdate;
GetCursorPos(&pt);
GetWindowRect(m_hCACMBRecog,&rcUpdate);
if ( PtInRect(&rcUpdate,pt) && m_bMouseDown )
#else // UNDER_CE
if(m_bMouseDown)
#endif // UNDER_CE
{
EXButton_SetCheck(m_hCACMBRecog,!bPushed);
}
else
{
EXButton_SetCheck(m_hCACMBRecog,bPushed);
}
}
//////////////////////////////////////////////////////////////////
// Function : CHwxInkWindow_OnChangeView
// Type : INT
// Purpose : Notify view changes.
// Args :
// : BOOL fLarge
// Return :
// DATE : Tue Jul 28 18:43:06 1998
// Histroy :
//////////////////////////////////////////////////////////////////
INT CHwxInkWindow::OnChangeView(BOOL fLarge)
{
if(m_hCACSwitch && ::IsWindow(m_hCACSwitch)) {
DDButton_SetCurSel(m_hCACSwitch, fLarge ? 0 : 1);
}
return 0;
}