2025-11-28 00:35:46 +09:00

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;
}