¿

ٸ μ IME ¥:2022-2-22 7:54:53 ȸ:589
ۼ : daypark
Ʈ : 1200
: 2020-02-14 10:42:05
湮Ƚ : 253
177, 29
Ұ : ڱҰ ԷϽʽÿ.
ۼ

IME Է ǹϴµ ؼ ѱ̳ ̳Դϴ.
帶 IME ؽƮ µ Ҽ 带 ϴ.
μ UI 尡 ִ Ư 츦 α׷ IME 尡 .
ڰ ѱŰ Shift+Space 带 ٲ㰡 µ δ α׷ 带 ؾ 찡 ֽϴ.
ݵ Է¹޾ƾ Ѵٰų ѱ۷ Է¹
׷ ڽ IME 带 ϰų ϴ մϴ.
ݸ ٸ μ 带 ϰų ϴ ġ ʽϴ.
̷ ϴ. 

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass = TEXT("IMEControl");

int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance
    , _In_ LPSTR lpszCmdParam, _In_ int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    WNDCLASS WndClass;
    g_hInst = hInstance;

    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hInstance = hInstance;
    WndClass.lpfnWndProc = WndProc;
    WndClass.lpszClassName = lpszClass;
    WndClass.lpszMenuName = NULL;
    WndClass.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&WndClass);

    hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 600, 400,
        NULL, (HMENU)NULL, hInstance, NULL);
    ShowWindow(hWnd, nCmdShow);

    while (GetMessage(&Message, NULL, 0, 0)) {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }
    return (int)Message.wParam;
}

#include <imm.h>
#pragma comment(lib, "imm32.lib")

TCHAR stNotepad[256] = L"޸ ƴ";
TCHAR stForeWnd[256] = L"Ȱ ";
HWND hNotepad = NULL;
HWND hForeWnd = NULL;
enum { ENG, HAN };
enum { N_TOGGLE, N_HAN, N_ENG, F_TOGGLE, F_HAN, F_ENG };

// Ư IME 带 Ѵ.
int GetWndIMEMode(HWND hWnd)
{
    if (hWnd == NULL) return -1;
    HWND hIme = ImmGetDefaultIMEWnd(hWnd);
    if (hIme == NULL) return -1;
    // 5 ǹ̸ . 
    return (int)SendMessage(hIme, WM_IME_CONTROL, 5, NULL);
}

// Ư IME .
void SetWndIMEMode(HWND hWnd, int imeMode)
{
    if (hWnd == NULL) return;
    int nowMode = GetWndIMEMode(hWnd);
    if (nowMode != imeMode) {
        SendMessage(hWnd, WM_KEYDOWN, VK_HANGUL, 0);
        SendMessage(hWnd, WM_KEYUP, VK_HANGUL, 0);
    }
}

// IME Ű ̺Ʈ . ׻ Ŀ Ȱ ̴.
void ToggleIMEMode()
{
    keybd_event(VK_HANGUL, 0, 0, 0);
    keybd_event(VK_HANGUL, 0, KEYEVENTF_KEYUP, 0);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    DWORD imeMode;
    TCHAR cap[256];

    switch (iMessage) {
    case WM_CREATE:
        hWndMain = hWnd;
        SetTimer(hWnd, 1, 1000, NULL);
        CreateWindow(TEXT("button"), TEXT(""), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 10, 30, 90, 25, hWnd, (HMENU)N_TOGGLE, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("ѱ"), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 110, 30, 90, 25, hWnd, (HMENU)N_HAN, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT(""), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 210, 30, 90, 25, hWnd, (HMENU)N_ENG, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("2 "), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 10, 130, 90, 25, hWnd, (HMENU)F_TOGGLE, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("2 ѱ"), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 110, 130, 90, 25, hWnd, (HMENU)F_HAN, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("2 "), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 210, 130, 90, 25, hWnd, (HMENU)F_ENG, g_hInst, NULL);
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        TextOut(hdc, 10, 10, stNotepad, lstrlen(stNotepad));
        TextOut(hdc, 10, 110, stForeWnd, lstrlen(stForeWnd));
        EndPaint(hWnd, &ps);
        return 0;
    case WM_COMMAND:
        switch (LOWORD(wParam)) {
        case N_TOGGLE:
            SetWndIMEMode(hNotepad, GetWndIMEMode(hNotepad) == HAN ? ENG:HAN);
            break;
        case N_HAN:
            SetWndIMEMode(hNotepad, HAN);
            break;
        case N_ENG:
            SetWndIMEMode(hNotepad, ENG);
            break;
        case F_TOGGLE:
            SetTimer(hWnd, F_TOGGLE, 2000, NULL);
            break;
        case F_HAN:
            SetTimer(hWnd, F_HAN, 2000, NULL);
            break;
        case F_ENG:
            SetTimer(hWnd, F_ENG, 2000, NULL);
            break;
        }
        return 0;
    case WM_TIMER:
        switch (wParam) {
        case 1:
            hNotepad = FindWindow(L"NotePad", NULL);
            if (hNotepad == NULL) {
                lstrcpy(stNotepad, L"޸ ƴ");
            } else {
                imeMode = GetWndIMEMode(hNotepad);
                wsprintf(stNotepad, L"޸ : %s", imeMode == 1 ? L"ѱ" : L"");
            }
            hForeWnd = GetForegroundWindow();
            if (hForeWnd == NULL) {
                lstrcpy(stForeWnd, L"Ȱ 츦 ã ");
            } else {
                imeMode = GetWndIMEMode(hForeWnd);
                GetWindowText(hForeWnd, cap, 256);
                wsprintf(stForeWnd, L"Ȱ (%s) : %s", cap, imeMode == 1 ? L"ѱ" : L"");
            }
            InvalidateRect(hWnd, NULL, TRUE);
            break;
        case F_TOGGLE:
            // 2 Ȱ IME . Ŀ ű ֵ 2 ð ش.
            KillTimer(hWnd, F_TOGGLE);
            ToggleIMEMode();
            break;
        case F_HAN:
            KillTimer(hWnd, F_HAN);
            hForeWnd = GetForegroundWindow();
            if (hForeWnd != NULL) {
                imeMode = GetWndIMEMode(hForeWnd);
                if (imeMode == 0) {
                    ToggleIMEMode();
                }
            }
            break;
        case F_ENG:
            KillTimer(hWnd, F_ENG);
            hForeWnd = GetForegroundWindow();
            if (hForeWnd != NULL) {
                imeMode = GetWndIMEMode(hForeWnd);
                if (imeMode == 1) {
                    ToggleIMEMode();
                }
            }
            break;
        }
        return 0;
    case WM_DESTROY:
        KillTimer(hWnd, 1);
        PostQuitMessage(0);
        return 0;
    }
    return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

޸ Ȱ 쿡 IME 带 ϴ ڵԴϴ.
WM_IME_CONTROL ޽ 5 ˴ϴ.
5 ۸ؼ ãƳ ǵ ü ǹ̴ 𸣰ھ.
ƹư ˴ϴ.

Ư IME 带 ϴ ã ߽ϴ. 
SendMessage VK_HANGUL Ű ٲ ʴ.
κ ʿѵ μ ̶ ׿.

Ȱ 带 ϴ ׳ մϴ. 
keydb_event Լ ýۿ VK_HANGUL Ű ˴ϴ.
Ű Ŀ ޵Ǿ 带 ٲٰ ˴ϴ.
, IME 带 մϴ.
Ư · ٲٰ ¸ ϴ ° ƴϸ ϸ ǰ. 



׽Ʈ 2 Ŀ Ȱ IME 带 Ǵ , ȯմϴ.
2 ð ư ׻ α׷ Ȱ ̱
ϴ Ŀ ű ð ִ ̴ϴ.
ϸ Űó IME 带 ǵ ϴ α׷ մϴ.
Ư IME 带 ϴ ã ߴµ ֽϴ.
ã ۷ ϵ ҰԿ.



 


  망가 인간 젖소 도개면안마 침산리출장샵 원주 출장만남 간석오거리역성인맛사지 서울출장샵,목포출장안마,용인출장샵 동양녀 조개 모음집 성인망가만화 출장여대생 | 대구출장마사지 | 용산출장안마 공평동출장샵 서울대입구역 오피 동대문구출장마사지 외국언니 부산콜걸 외도녀 회현동모텔촌 슈슈홈타이출장마사지 데얀

곱창 세계 가상화폐 거래소 순위,대출 상담 시간,실시간 대출 문의 가을스타그램 딸래미그램 불토 대출한도조회 많이하면✓주택담보대출 ltv dti✓담보대출 설정비용 온천장맛집 아줌마일상 개띠아기 신사동맛집 오니인 모녀는 인간의 수컷과 애만들기 하고싶어~엄마편 대천해수욕장숙소 화장실몰카 골프대회 이하얀

Ϻ Ű ũ


αϼž ֽϴ.