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.
 
 
 
 
 
 

388 lines
12 KiB

#include "hwxobj.h"
#include "const.h"
#include "../lib/ptt/ptt.h"
#include "cexres.h"
#include "dbg.h"
#include "cmnhdr.h"
// HWX Window procedures
LRESULT WINAPI HWXWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
//990716:ToshiaK for Win64
//CHwxInkWindow * app = (CHwxInkWindow *)GetWindowLong(hwnd,0);
CHwxInkWindow * app = (CHwxInkWindow *)WinGetPtr(hwnd,0);
switch(msg)
{
case WM_CREATE:
app = (CHwxInkWindow *)((LPCREATESTRUCT)lp)->lpCreateParams;
//990810:ToshiaK for Win64
//SetWindowLong(hwnd,0,(LONG)app);
WinSetPtr(hwnd, 0, (LPVOID)app);
if ( !app->HandleCreate(hwnd) )
{
return -1;
}
return 0;
case WM_NOTIFY:
if ( ((LPNMHDR)lp)->code == TTN_NEEDTEXTW )
{
app->SetTooltipText(lp);
}
return 0;
case WM_PAINT:
app->HandlePaint(hwnd);
return 0;
case WM_COMMAND:
return app->HandleCommand(hwnd, msg, wp, lp);
case WM_SIZE:
if ( SIZE_RESTORED == wp )
app->HandleSize(wp,lp);
return 0;
case WM_SETTINGCHANGE:
if(app) {
return app->HandleSettingChange(hwnd,msg,wp,lp);
}
return 0;
#ifdef UNDER_CE // Windows CE specific
case WM_WINDOWPOSCHANGED:
return 0;
#endif // UNDER_CE
case WM_ERASEBKGND:
return 0;
#ifndef UNDER_CE // Windows CE does not support WinHelp
case WM_CONTEXTMENU:
case WM_HELP:
app->HandleHelp(hwnd,msg,wp,lp);
return 0;
#endif // UNDER_CE
#ifndef UNDER_CE // Windows CE does not support WM_ENTERIDLE
case WM_ENTERIDLE:
Dbg(("WM_ENTERIDLE for HWXWndPrc\n"));
if((::GetKeyState(VK_CONTROL) & 0x8000) &&
((::GetKeyState(VK_SHIFT) & 0x8000) || (::GetKeyState(VK_SPACE) & 0x8000))) {
Dbg(("VK_CONTROL & SHIFT or VK_CONTROL & SPACE COME\n"));
::SendMessage(hwnd, WM_CANCELMODE, 0, 0L);
return 0;
}
return DefWindowProc(hwnd, msg, wp, lp);
#endif // UNDER_CE
default:
return DefWindowProc(hwnd, msg, wp, lp);
}
}
LRESULT WINAPI MBWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
//990810:ToshiaK for Win64
//CHwxMB * app = (CHwxMB *)GetWindowLong(hwnd,0);
CHwxMB * app = (CHwxMB *)WinGetPtr(hwnd,0);
switch (msg)
{
case WM_CREATE:
{
app = (CHwxMB *)((LPCREATESTRUCT)lp)->lpCreateParams;
//990810:ToshiaK for Win64
//SetWindowLong(hwnd,0,(LONG)app);
WinSetPtr(hwnd, 0, (LPVOID)app);
return 0;
}
// case WM_DESTROY:
//970729: by ToshiaK temporarily, comment out
// PostThreadMessage((app->GetMBThread())->GetID(), THRDMSG_EXIT, 0, 0);
// PostQuitMessage(0);
// return 0;
case WM_PAINT:
app->HandlePaint(hwnd);
return 0;
case WM_LBUTTONDOWN:
case WM_LBUTTONDBLCLK:
case WM_LBUTTONUP:
case WM_MOUSEMOVE:
case WM_RBUTTONUP:
case WM_RBUTTONDOWN:
if(!app) { //toshiaK:980324
break;
}
if( app->HandleMouseEvent(hwnd, msg, wp,lp) )
return 0;
else
break;
case WM_TIMER:
KillTimer(hwnd, TIMER_ID);
if(!app) { //toshiaK:980324
break;
}
app->SetTimerStarted(FALSE);
app->HandleUserMessage(hwnd, MB_WM_DETERMINE,wp,lp);
return 0;
case WM_COMMAND:
if(!app) { //toshiaK:980324
break;
}
return app->HandleCommand(hwnd,msg,wp,lp);
// User defined window messages
case MB_WM_ERASE:
case MB_WM_DETERMINE:
case MB_WM_HWXCHAR:
// case MB_WM_COMCHAR:
case MB_WM_COPYINK:
if(!app) { //toshiaK:980324
break;
}
return app->HandleUserMessage(hwnd, msg,wp,lp);
case WM_ERASEBKGND:
return 0;
#ifndef UNDER_CE // Windows CE does not support WM_ENTERIDLE
case WM_ENTERIDLE:
if((::GetKeyState(VK_CONTROL) & 0x8000) &&
((::GetKeyState(VK_SHIFT) & 0x8000) || (::GetKeyState(VK_SPACE) & 0x8000))) {
Dbg(("VK_CONTROL & SHIFT or VK_CONTROL & SPACE COME\n"));
Dbg(("WM_ENTERIDLE for MBWndProc\n"));
::SendMessage(hwnd, WM_CANCELMODE, 0, 0L);
return 0;
}
return 0;
#endif // UNDER_CE
default:
return DefWindowProc(hwnd, msg, wp, lp);
}
return 1;
}
LRESULT WINAPI CACWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
//990810:toshiaK for Win64
//CHwxCAC * app = (CHwxCAC *)GetWindowLong(hwnd,0);
CHwxCAC * app = (CHwxCAC *)WinGetPtr(hwnd,0);
switch (msg)
{
case WM_CREATE:
app = (CHwxCAC *)((LPCREATESTRUCT)lp)->lpCreateParams;
//990716:ToshiaK for Win64
//SetWindowLong(hwnd,0,(LONG)app);
WinSetPtr(hwnd, 0, (LPVOID)app);
PostMessage(hwnd,CAC_WM_DRAWSAMPLE,0,0);
return 0;
// case WM_DESTROY:
//970729: by ToshiaK, temporarily comment out
// PostQuitMessage(0);
// break;
case WM_PAINT:
app->HandlePaint(hwnd);
break;
case WM_RBUTTONUP:
case WM_RBUTTONDOWN:
case WM_LBUTTONDBLCLK:
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_MOUSEMOVE:
app->HandleMouseEvent(hwnd,msg,wp,lp);
break;
case WM_NOTIFY:
if ( ((LPNMHDR)lp)->code == TTN_NEEDTEXT_WITHUSERINFO )
{
app->SetToolTipText(lp);
}
break;
case WM_COMMAND:
return app->HandleCommand(hwnd,msg,wp,lp);
case CAC_WM_RESULT:
app->HandleRecogResult(hwnd,wp,lp);
break;
case CAC_WM_SHOWRESULT:
app->HandleShowRecogResult(hwnd,wp,lp);
break;
case CAC_WM_SENDRESULT:
app->HandleSendResult(hwnd,wp,lp);
break;
case CAC_WM_DRAWSAMPLE:
app->HandleDrawSample();
break;
//990618:ToshiaK for Kotae# 1329
case WM_ERASEBKGND:
break;
#ifndef UNDER_CE // Windows CE does not support WM_ENTERIDLE
case WM_ENTERIDLE:
Dbg(("WM_ENTERIDLE for CACWndProc\n"));
if((::GetKeyState(VK_CONTROL) & 0x8000) &&
((::GetKeyState(VK_SHIFT) & 0x8000) || (::GetKeyState(VK_SPACE) & 0x8000))) {
Dbg(("VK_CONTROL & SHIFT or VK_CONTROL & SPACE COME\n"));
Dbg(("WM_ENTERIDLE for MBWndProc\n"));
::SendMessage(hwnd, WM_CANCELMODE, 0, 0L);
return 0;
}
break;
#endif // UNDER_CE
default:
return DefWindowProc(hwnd, msg, wp, lp);
}
return 0;
}
//----------------------------------------------------------------
//980805:ToshiaK. PRC merge
//----------------------------------------------------------------
LRESULT CALLBACK IMELockWndProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
WNDPROC wcOrgComboProc;
//990810:ToshiaK for Win64
//wcOrgComboProc = (WNDPROC)GetWindowLong(hWnd, GWL_USERDATA);
wcOrgComboProc = (WNDPROC)WinGetUserPtr(hWnd);
switch (uMsg) {
#ifndef UNDER_CE // Windows CE does not support WM_INPUTLANGCHANGEREQUEST
case WM_INPUTLANGCHANGEREQUEST:
MessageBeep((UINT)-1);
return 0;
#endif // UNDER_CE
case WM_DESTROY:
//990716:ToshiaK for Win64
//SetWindowLong(hWnd, GWL_WNDPROC, (LONG)wcOrgComboProc);
//SetWindowLong(hWnd, GWL_USERDATA, 0);
WinSetWndProc(hWnd, (WNDPROC)wcOrgComboProc);
WinSetUserPtr(hWnd, (LPVOID)0);
break;
default:
break;
}
return CallWindowProc((WNDPROC)wcOrgComboProc, hWnd, uMsg, wParam, lParam);
}
BOOL CALLBACK SubclassChildProc(
HWND hWnd, // handle to child window
LPARAM lParam) // application-defined value
{
WNDPROC wpOldComboProc;
// Subclass child window to IME-UnSwitchable
//990716:ToshiaK for Win64
//wpOldComboProc = (WNDPROC)GetWindowLong(hWnd, GWL_WNDPROC);
//SetWindowLong(hWnd, GWL_WNDPROC, (LONG)IMELockWndProc);
//SetWindowLong(hWnd, GWL_USERDATA, (LONG)wpOldComboProc);
wpOldComboProc = (WNDPROC)WinGetWndProc(hWnd);
WinSetWndProc(hWnd, (WNDPROC)IMELockWndProc);
WinSetUserPtr(hWnd, (LPVOID)wpOldComboProc);
return TRUE;
Unref(lParam);
}
void SubclassChildWindowAll(HWND hWndParent)
{
#ifndef UNDER_CE // Windows CE does not support WM_INPUTLANGCHANGEREQUEST
EnumChildWindows(hWndParent, (WNDENUMPROC)SubclassChildProc, 0);
#endif // UNDER_CE
return;
}
INT_PTR CALLBACK CACMBPropDlgProc(HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
{
CHwxInkWindow * pInk;
switch (msg)
{
case WM_INITDIALOG:
{
pInk = (CHwxInkWindow *)lp;
#ifndef UNDER_CE // Windows CE does not support SetProp
//SetPropW(hdlg,TEXT("CMPROP"),(HANDLE)lp);
if(::IsWindowUnicode(hdlg)) {
::SetPropW(hdlg,L"CMPROP",(HANDLE)lp);
}
else {
::SetPropA(hdlg,"CMPROP",(HANDLE)lp);
}
//::SetPropW(hdlg,TEXT("CMPROP"),(HANDLE)lp);
#else // UNDER_CE
::SetWindowLong(hdlg, GWL_USERDATA, (LONG)lp);
#endif // UNDER_CE
if ( pInk )
pInk->HandleDlgMsg(hdlg,TRUE);
CExres::SetDefaultGUIFont(hdlg); //971117: ToshiaK
//----------------------------------------------------------------
//980805:ToshiaK. PRC merge.
//----------------------------------------------------------------
SubclassChildWindowAll(hdlg);
}
return TRUE;
case WM_COMMAND:
if ( LOWORD(wp) == IDOK )
{
#ifndef UNDER_CE // Windows CE does not support GetProp
//pInk = (CHwxInkWindow *)GetProp(hdlg,TEXT("CMPROP"));
if(::IsWindowUnicode(hdlg)) {
pInk = (CHwxInkWindow *)GetPropW(hdlg, L"CMPROP");
}
else {
pInk = (CHwxInkWindow *)GetPropA(hdlg,"CMPROP");
}
#else // UNDER_CE
pInk = (CHwxInkWindow *)GetWindowLong(hdlg, GWL_USERDATA);
#endif // UNDER_CE
if ( pInk )
pInk->HandleDlgMsg(hdlg,FALSE);
#ifndef UNDER_CE // Windows CE does not support RemoveProp
//RemoveProp(hdlg,TEXT("CMPROP"));
if(::IsWindowUnicode(hdlg)) {
::RemovePropW(hdlg, L"CMPROP");
}
else {
::RemovePropA(hdlg, "CMPROP");
}
#endif // UNDER_CE
EndDialog(hdlg,TRUE);
return TRUE;
}
else if ( LOWORD(wp) == IDCANCEL )
{
#ifndef UNDER_CE // Windows CE does not support RemoveProp
//RemoveProp(hdlg,TEXT("CMPROP"));
if(::IsWindowUnicode(hdlg)) {
::RemovePropW(hdlg, L"CMPROP");
}
else {
::RemovePropA(hdlg, "CMPROP");
}
#endif // UNDER_CE
EndDialog(hdlg,FALSE);
return TRUE;
}
default:
return FALSE;
}
}
LRESULT WINAPI CACMBBtnWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
//990810:ToshiaK for Win64
//CHwxInkWindow * app = (CHwxInkWindow *)GetWindowLong(hwnd,GWL_USERDATA);
CHwxInkWindow * app = (CHwxInkWindow *)WinGetUserPtr(hwnd);
if ( !app )
return 0;
return app->HandleBtnSubWnd(hwnd,msg,wp,lp);
}