129 lines
4.1 KiB
C++
129 lines
4.1 KiB
C++
/**************************************************************************
|
|
THIS CODE AND INFORMATION IS PROVIDED 'AS IS' WITHOUT WARRANTY OF
|
|
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
PARTICULAR PURPOSE.
|
|
|
|
Copyright 2001 Microsoft Corporation. All Rights Reserved.
|
|
**************************************************************************/
|
|
|
|
/**************************************************************************
|
|
|
|
File: TSFApp.cpp
|
|
|
|
Description: Main Windows App Implementation
|
|
|
|
**************************************************************************/
|
|
|
|
/**************************************************************************
|
|
Include Files
|
|
**************************************************************************/
|
|
|
|
#include "TSFWnd.h"
|
|
|
|
/**************************************************************************
|
|
Local Function Prototypes
|
|
**************************************************************************/
|
|
|
|
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
|
|
|
|
/**************************************************************************
|
|
Global Variables
|
|
**************************************************************************/
|
|
|
|
ITfThreadMgr *g_pThreadMgr;
|
|
|
|
/**************************************************************************
|
|
|
|
WinMain()
|
|
|
|
**************************************************************************/
|
|
|
|
int WINAPI WinMain( HINSTANCE hInstance,
|
|
HINSTANCE hPrevInstance,
|
|
LPSTR lpCmdLine,
|
|
int nCmdShow)
|
|
{
|
|
CTSFMainWnd *pMainWnd;
|
|
int nReturn = 0;
|
|
|
|
CoInitialize(NULL);
|
|
|
|
pMainWnd = new CTSFMainWnd(hInstance);
|
|
|
|
if(NULL == pMainWnd)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(pMainWnd->Initialize(nCmdShow))
|
|
{
|
|
ITfKeystrokeMgr *pKeyMgr;
|
|
ITfMessagePump *pMsgPump;
|
|
|
|
// get the keystroke manager interfce
|
|
if(SUCCEEDED(g_pThreadMgr->QueryInterface(IID_ITfKeystrokeMgr, (void **)&pKeyMgr)))
|
|
{
|
|
// get the message pump wrapper interface
|
|
if(SUCCEEDED(g_pThreadMgr->QueryInterface(IID_ITfMessagePump, (void **)&pMsgPump)))
|
|
{
|
|
BOOL fResult = TRUE;
|
|
|
|
while(fResult)
|
|
{
|
|
MSG msg;
|
|
BOOL fEaten;
|
|
|
|
/*
|
|
Get the next message in the queue. fResult receives FALSE if WM_QUIT is encountered
|
|
*/
|
|
if(FAILED(pMsgPump->GetMessage(&msg, NULL, 0, 0, &fResult)))
|
|
{
|
|
fResult = FALSE;
|
|
}
|
|
else if(WM_KEYDOWN == msg.message)
|
|
{
|
|
// does an ime want it?
|
|
if (pKeyMgr->TestKeyDown(msg.wParam, msg.lParam, &fEaten) == S_OK && fEaten &&
|
|
pKeyMgr->KeyDown(msg.wParam, msg.lParam, &fEaten) == S_OK && fEaten)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
else if(WM_KEYUP == msg.message)
|
|
{
|
|
// does an ime want it?
|
|
if (pKeyMgr->TestKeyUp(msg.wParam, msg.lParam, &fEaten) == S_OK && fEaten &&
|
|
pKeyMgr->KeyUp(msg.wParam, msg.lParam, &fEaten) == S_OK && fEaten)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if(fResult)
|
|
{
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
|
|
if(WM_QUIT == msg.message)
|
|
{
|
|
nReturn = (int)msg.wParam;
|
|
}
|
|
}
|
|
|
|
pMsgPump->Release();
|
|
}
|
|
|
|
pKeyMgr->Release();
|
|
}
|
|
}
|
|
|
|
delete pMainWnd;
|
|
|
|
CoUninitialize();
|
|
|
|
return nReturn;
|
|
}
|
|
|