DWORD GetNLSMode( HWND hWnd, HANDLE hConsole ) { PCONSOLE_TABLE ConTbl; HIMC hIMC; ConTbl = SearchConsole(hConsole); if (ConTbl == NULL) { DBGPRINT(("CONIME: Error! Cannot found registed Console\n")); return 0; } hIMC = ImmGetContext( hWnd ) ; if ( hIMC == (HIMC)NULL ) return IME_CMODE_DISABLE; ImmGetConversionStatus(hIMC, &ConTbl->dwConversion, &ConTbl->dwSentence); ConTbl->fOpen = GetOpenStatusByCodepage( hIMC, ConTbl ) ; ImmReleaseContext( hWnd, hIMC ); return ((ConTbl->fOpen ? IME_CMODE_OPEN : 0) + ConTbl->dwConversion); }
static int ui_ime_get_state(lua_State* L) { HWND hwnd; HIMC himc; DWORD conversion; DWORD sentence; hwnd = GetForegroundWindow(); himc = ImmGetContext(hwnd); ImmGetConversionStatus(himc, &conversion, &sentence); Crj_BuildValues(L, "{Qll}", ImmGetOpenStatus(himc), conversion, sentence); char text[256]; sprintf(text, "[%p] [%d] [%lx] [%lx]", (void*)hwnd, ImmGetOpenStatus(himc), conversion, sentence ); MessageBox(NULL, text, "cereja", MB_OK); ImmReleaseContext(hwnd, himc); return 1; }
void JIme::SetImeMode(const DWORD mode) { HWND hWnd = JMain::GetInstance().GetJWindow().GetWindowHandle(); HIMC hImc = ImmGetContext(hWnd); DWORD dwConv, dwSent; ImmGetConversionStatus(hImc, &dwConv, &dwSent); ImmSetConversionStatus(hImc, mode, dwSent); ImmReleaseContext(hWnd, hImc); }
static HRESULT WINAPI ActiveIMMApp_GetConversionStatus(IActiveIMMApp* This, HIMC hIMC, DWORD *pfdwConversion, DWORD *pfdwSentence) { BOOL rc; rc = ImmGetConversionStatus(hIMC, pfdwConversion, pfdwSentence); if (rc) return S_OK; else return E_FAIL; }
BOOL ImeUISetConversionMode( HWND hwnd ) { PCONSOLE_TABLE ConTbl; HIMC hIMC; // Input context handle. LPCONIME_UIMODEINFO lpModeInfo ; COPYDATASTRUCT CopyData ; DWORD OldConversion ; DBGPRINT(("CONIME: Get IMN_SETCONVERSIONMODE Message\n")); ConTbl = SearchConsole(LastConsole); if (ConTbl == NULL) { DBGPRINT(("CONIME: Error! Cannot found registed Console\n")); return FALSE; } hIMC = ImmGetContext( hwnd ) ; if ( hIMC == 0 ) return FALSE; lpModeInfo = (LPCONIME_UIMODEINFO)LocalAlloc(LPTR, sizeof(CONIME_UIMODEINFO) ) ; if ( lpModeInfo == NULL) { ImmReleaseContext( hwnd, hIMC ); return FALSE; } OldConversion = ConTbl->dwConversion ; ImmGetConversionStatus(hIMC, (LPDWORD)&ConTbl->dwConversion, (LPDWORD)&ConTbl->dwSentence) ; CopyData.dwData = CI_CONIMEMODEINFO ; CopyData.cbData = sizeof(CONIME_UIMODEINFO) ; CopyData.lpData = lpModeInfo ; if (ImeUIMakeInfoString(ConTbl, lpModeInfo)) { ConsoleImeSendMessage( ConTbl->hWndCon, (WPARAM)hwnd, (LPARAM)&CopyData ) ; } LocalFree( lpModeInfo ); ImmReleaseContext( hwnd, hIMC ); return TRUE ; }
void handleIMEConversionModeUpdate(HWND hwnd, bool report) { if(!ImmGetProperty(GetKeyboardLayout(0),IGP_CONVERSION)) return; /* Obtain IME context */ HIMC imc = ImmGetContext(hwnd); if (!imc) return; DWORD flags=0; ImmGetConversionStatus(imc,&flags,NULL); ImmReleaseContext(hwnd, imc); if(report&&flags!=lastConversionModeFlags) { nvdaControllerInternal_inputConversionModeUpdate(lastConversionModeFlags,flags,((unsigned long)GetKeyboardLayout(0))&0xffff); } lastConversionModeFlags=flags; }
bool CIme::OnWM_INPUTLANGCHANGE( HWND hWnd ){ //ime改变 HKL hKL = GetKeyboardLayout( 0 ); if( ImmIsIME( hKL )){ HIMC hIMC = ImmGetContext( hWnd ); ImmEscape( hKL, hIMC, IME_ESC_IME_NAME, m_szImeName );//取得新输入法名字 DWORD dwConversion, dwSentence; ImmGetConversionStatus( hIMC, &dwConversion, &dwSentence ); m_bImeSharp = ( dwConversion & IME_CMODE_FULLSHAPE )? true : false;//取得全角标志 m_bImeSymbol = ( dwConversion & IME_CMODE_SYMBOL )? true : false;//取得中文标点标志 ImmReleaseContext( hWnd, hIMC ); } else//英文输入 m_szImeName[ 0 ] = 0; return false;//总是返回false,因为需要窗口函数调用DefWindowProc继续处理 }
void Mint::SetHWND(HWND hWnd) { m_hWnd = hWnd; // ime status âÀ» hideÇÑ´Ù HWND imehwnd=ImmGetDefaultIMEWnd(Mint::GetInstance()->GetHWND()); LRESULT lr=SendMessage(imehwnd,WM_IME_CONTROL ,IMC_CLOSESTATUSWINDOW,0); _ASSERT(lr==0); HIMC hImc; hImc = ImmGetContext(Mint::GetInstance()->GetHWND()); if (hImc) { // Get current IME status DWORD dwIMEConvMode, dwSentMode; ImmGetConversionStatus(hImc, &dwIMEConvMode, &dwSentMode); ImmSetConversionStatus(hImc,IME_CMODE_ALPHANUMERIC, dwSentMode); Mint::EnableIME(false); } }
bool CIme::OnWM_IME_NOTIFY( HWND hWnd, WPARAM wParam ){ HIMC hIMC; DWORD dwSize; DWORD dwConversion, dwSentence; switch( wParam ){ case IMN_SETCONVERSIONMODE://全角/半角,中/英文标点改变 hIMC = ImmGetContext( hWnd ); ImmGetConversionStatus( hIMC, &dwConversion, &dwSentence ); m_bImeSharp = ( dwConversion & IME_CMODE_FULLSHAPE )? true : false; m_bImeSymbol = ( dwConversion & IME_CMODE_SYMBOL )? true : false; ImmReleaseContext( hWnd, hIMC ); break; case IMN_OPENCANDIDATE://进入选字状态 case IMN_CHANGECANDIDATE://选字表翻页 hIMC = ImmGetContext( hWnd ); if( m_lpCandList ){ GlobalFree( (HANDLE)m_lpCandList ); m_lpCandList = NULL; }//释放以前的选字表 if( dwSize = ImmGetCandidateList( hIMC, 0, NULL, 0 )){ m_lpCandList = (LPCANDIDATELIST)GlobalAlloc( GPTR, dwSize ); if( m_lpCandList ) ImmGetCandidateList( hIMC, 0, m_lpCandList, dwSize ); }//得到新的选字表 ImmReleaseContext( hWnd, hIMC ); if( m_lpCandList )ConvertCandList( m_lpCandList, m_szCandList );//选字表整理成串 break; case IMN_CLOSECANDIDATE://关闭选字表 if( m_lpCandList ){ GlobalFree( (HANDLE)m_lpCandList ); m_lpCandList = NULL; }//释放 m_szCandList[ 0 ] = 0; break; } return true;//总是返回true,防止ime窗口打开 }
bool Mint::IsNativeIME(void) const { HIMC hImc = ImmGetContext(GetInstance()->GetHWND()); if(hImc==NULL) return false; bool bNative = false; if(GetPrimaryLanguageIdentifier()==LANG_JAPANESE){ // ÀϺ»¾îÀΰæ¿ì ConversionMode°¡ ¾Æ´Ñ OpenSatus·Î ÀԷ±Ⱑ È°¼ºÈ µÇ¾ú´ÂÁö ¾Ë ¼ö ÀÖ´Ù. // ÀϺ»¾î IME ÀÌ»óÇÔ! bNative = (ImmGetOpenStatus(hImc)==TRUE); } else{ // ¿µ¹®(IME_CMODE_ALPHANUMERIC) ¶Ç´Â ³×ÀÌƼºê(IME_CMODE_NATIVE) ¾ð¾îÀÎÁö¸¦ ÆǺ° DWORD dwConvMode, dwSentMode; ImmGetConversionStatus(hImc, &dwConvMode, &dwSentMode); bNative = (dwConvMode&IME_CMODE_NATIVE); } ImmReleaseContext(GetInstance()->GetHWND(), hImc); return bNative; }
LRESULT CALLBACK EditCtlProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { LPCTSTR lpTable, lpTable1; TCHAR c; #ifdef FAREAST TCHAR ch, chHW; #endif // FAREAST HKL hkl = GetKeyboardLayout(0); ASSERT(oldEditCtlProc); switch (message) { case WM_PASTE : { BOOL bPassThrough = TRUE; if (IsNumericOnlyEdit(hwnd)) { // only going to accept pastes that have pure numeric data in them HANDLE hMem; if(OpenClipboard(hwnd)) { hMem = GetClipboardData(CF_UNICODETEXT); if(hMem) { TCHAR *pText = (TCHAR *)LocalLock(hMem); // can't fail on CE int iLen = _tcslen(pText); int iPos = 0; for (iPos = 0; (iPos < iLen) && bPassThrough; iPos++) { if (!_istdigit(pText[iPos])) { // bad char bPassThrough = FALSE; } } LocalUnlock(hMem); } CloseClipboard(); } } if (bPassThrough) { return CallWindowProc(oldEditCtlProc,hwnd, message, wParam, lParam); } else { MessageBeep(MB_OK); return FALSE; } } break; case WM_IME_COMPOSITION: if( ImmIsIME(hkl ) && LOWORD(hkl ) == MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT)) { HIMC himc = ImmGetContext(hwnd); if (himc) { TCHAR szTempStr[4]; if (0<ImmGetCompositionString(himc,GCS_COMPSTR, szTempStr, 4)) { DWORD fdwConversion; DWORD fdwSentence; ImmNotifyIME(himc,NI_COMPOSITIONSTR,CPS_CANCEL,0); ImmGetConversionStatus(himc, &fdwConversion, &fdwSentence); fdwConversion&=(~IME_CMODE_NATIVE); ImmSetConversionStatus(himc,fdwConversion, fdwSentence); } ImmReleaseContext(hwnd,himc); return CallWindowProc(oldEditCtlProc,hwnd, message, wParam, lParam); } } break; case WM_CHAR: #ifdef FAREAST // Convert full-width numbers to half width ch = (TCHAR)wParam; LCMapString(LOCALE_USER_DEFAULT, LCMAP_HALFWIDTH, &ch, 1, &chHW, 1); wParam = (WPARAM)chHW; #endif // FAREAST // This character is not ASCII. If your country/region needs specific characters. You // have to change this. Otherwise, we abandon this character. if (wParam >= 0x80 ) { // service on ilegal chars MessageBeep(MB_OK); return TRUE; } if (wParam < VK_SPACE || wParam > 0x7e ) { // service on legal chars //DPF("None ascii char. ignore \r\n "); break; } if ((lpTable = GetTable(hwnd)) == NULL) { // DPF("Can not find table, trying parent \r\n"); if ((lpTable = GetTable(GetParent(hwnd))) == NULL) { //DPF("Can not find table, \r\n"); break; } } lpTable1 = lpTable; if (wParam >= '0' && wParam <= '9') goto found; while ((c = *lpTable++) > 0) { if ((TCHAR)wParam == c) goto found; } // now try w/ upper case if (iswlower((TCHAR)wParam)) { wParam = (LPARAM)towupper((TCHAR)wParam); while ((c = *lpTable1++) > 0) { if ((TCHAR)wParam == c) goto found; } } //DPF1("Char '%c' not in table\r\n", wParam); MessageBeep(MB_OK); return TRUE; found: //DPF1("Found char '%c' in table\r\n", wParam); break; default: break; } // of switch return CallWindowProc(oldEditCtlProc, hwnd, message, wParam, lParam); }
static void test_ImmThreads(void) { HIMC himc, otherHimc, h1; igc_threadinfo threadinfo; HANDLE hThread; DWORD dwThreadId; BOOL rc; LOGFONT lf; COMPOSITIONFORM cf; DWORD status, sentence; POINT pt; himc = ImmGetContext(hwnd); threadinfo.event = CreateEvent(NULL, TRUE, FALSE, NULL); threadinfo.himc = himc; hThread = CreateThread(NULL, 0, ImmGetContextThreadFunc, &threadinfo, 0, &dwThreadId ); WaitForSingleObject(threadinfo.event, INFINITE); otherHimc = ImmGetContext(threadinfo.hwnd); todo_wine ok(himc != otherHimc, "Windows from other threads should have different himc\n"); todo_wine ok(otherHimc == threadinfo.himc, "Context from other thread should not change in main thread\n"); if (0) /* FIXME: Causes wine to hang */ { h1 = ImmAssociateContext(hwnd,otherHimc); ok(h1 == NULL, "Should fail to be able to Associate a default context from a different thread\n"); h1 = ImmGetContext(hwnd); ok(h1 == himc, "Context for window should remain unchanged\n"); ImmReleaseContext(hwnd,h1); } /* OpenStatus */ rc = ImmSetOpenStatus(himc, TRUE); ok(rc != 0, "ImmSetOpenStatus failed\n"); rc = ImmGetOpenStatus(himc); ok(rc != 0, "ImmGetOpenStatus failed\n"); rc = ImmSetOpenStatus(himc, FALSE); ok(rc != 0, "ImmSetOpenStatus failed\n"); rc = ImmGetOpenStatus(himc); ok(rc == 0, "ImmGetOpenStatus failed\n"); rc = ImmSetOpenStatus(otherHimc, TRUE); todo_wine ok(rc == 0, "ImmSetOpenStatus should fail\n"); rc = ImmGetOpenStatus(otherHimc); todo_wine ok(rc == 0, "ImmGetOpenStatus failed\n"); rc = ImmSetOpenStatus(otherHimc, FALSE); todo_wine ok(rc == 0, "ImmSetOpenStatus should fail\n"); rc = ImmGetOpenStatus(otherHimc); ok(rc == 0, "ImmGetOpenStatus failed\n"); /* CompositionFont */ rc = ImmGetCompositionFont(himc, &lf); ok(rc != 0, "ImmGetCompositionFont failed\n"); rc = ImmSetCompositionFont(himc, &lf); ok(rc != 0, "ImmSetCompositionFont failed\n"); rc = ImmGetCompositionFont(otherHimc, &lf); ok(rc != 0 || broken(rc == 0), "ImmGetCompositionFont failed\n"); rc = ImmSetCompositionFont(otherHimc, &lf); todo_wine ok(rc == 0, "ImmSetCompositionFont should fail\n"); /* CompositionWindow */ rc = ImmSetCompositionWindow(himc, &cf); ok(rc != 0, "ImmSetCompositionWindow failed\n"); rc = ImmGetCompositionWindow(himc, &cf); ok(rc != 0, "ImmGetCompositionWindow failed\n"); rc = ImmSetCompositionWindow(otherHimc, &cf); todo_wine ok(rc == 0, "ImmSetCompositionWindow should fail\n"); rc = ImmGetCompositionWindow(otherHimc, &cf); ok(rc != 0 || broken(rc == 0), "ImmGetCompositionWindow failed\n"); /* ConversionStatus */ rc = ImmGetConversionStatus(himc, &status, &sentence); ok(rc != 0, "ImmGetConversionStatus failed\n"); rc = ImmSetConversionStatus(himc, status, sentence); ok(rc != 0, "ImmSetConversionStatus failed\n"); rc = ImmGetConversionStatus(otherHimc, &status, &sentence); ok(rc != 0 || broken(rc == 0), "ImmGetConversionStatus failed\n"); rc = ImmSetConversionStatus(otherHimc, status, sentence); todo_wine ok(rc == 0, "ImmSetConversionStatus should fail\n"); /* StatusWindowPos */ rc = ImmSetStatusWindowPos(himc, &pt); ok(rc != 0, "ImmSetStatusWindowPos failed\n"); rc = ImmGetStatusWindowPos(himc, &pt); ok(rc != 0, "ImmGetStatusWindowPos failed\n"); rc = ImmSetStatusWindowPos(otherHimc, &pt); todo_wine ok(rc == 0, "ImmSetStatusWindowPos should fail\n"); rc = ImmGetStatusWindowPos(otherHimc, &pt); ok(rc != 0 || broken(rc == 0), "ImmGetStatusWindowPos failed\n"); ImmReleaseContext(threadinfo.hwnd,otherHimc); ImmReleaseContext(hwnd,himc); DestroyWindow(threadinfo.hwnd); TerminateThread(hThread, 1); himc = ImmGetContext(GetDesktopWindow()); todo_wine ok(himc == NULL, "Should not be able to get himc from other process window\n"); }
LRESULT HandleNotify(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HIMC hIMC = NULL; BOOL fOpen = FALSE; DWORD dwConvMode, dwSentMode; switch (wParam) { case IMN_OPENSTATUSWINDOW: /* fall-through */ case IMN_CLOSESTATUSWINDOW: break; case IMN_SETOPENSTATUS: SetStatusItems(hWnd); hIMC = ImmGetContext(hWnd); fOpen = ImmGetOpenStatus(hIMC); UpdateShowOpenStatusButton(fOpen); ImmReleaseContext(hWnd,hIMC); break; case IMN_SETCONVERSIONMODE: hIMC = ImmGetContext(hWnd); fOpen = ImmGetOpenStatus(hIMC); ImmGetConversionStatus(hIMC,&dwConvMode,&dwSentMode); if (fOpen) { SetConvModeParts(dwConvMode); UpdateModeButton(dwConvMode); } else { ClearConvModeParts(); } ImmReleaseContext(hWnd,hIMC); break; case IMN_OPENCANDIDATE: if (!fShowCand || (lParam != 0x01)) { if (fdwProperty & IME_PROP_SPECIAL_UI) { // Normally, we only need to set the composition window // position for a special UI IME } else if (fdwProperty & IME_PROP_AT_CARET) { CANDIDATEFORM cdf; HIMC hIMC; hIMC = ImmGetContext(hWnd); cdf.dwIndex = 0; cdf.dwStyle = CFS_CANDIDATEPOS; cdf.ptCurrentPos.x = ptImeUIPos.x; cdf.ptCurrentPos.y = ptImeUIPos.y; ImmSetCandidateWindow(hIMC,&cdf); ImmReleaseContext(hWnd,hIMC); } else { // Normally, we only need to set the composition window // position for a near caret IME } return (DefWindowProc(hWnd, message, wParam, lParam)); } case IMN_CHANGECANDIDATE: #ifdef _DEBUG { TCHAR szDev[80]; DWORD dwSize; LPCANDIDATELIST lpC; hIMC = ImmGetContext(hWnd); if (dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) { lpC = (LPCANDIDATELIST)GlobalAlloc(GPTR,dwSize); ImmGetCandidateList(hIMC,0x0,lpC,dwSize); OutputDebugString(TEXT("DumpCandList!!!\r\n")); StringCchPrintf((LPTSTR)szDev,ARRAYSIZE(szDev),TEXT("dwCount %d\r\n"),lpC->dwCount); OutputDebugString((LPTSTR)szDev); StringCchPrintf((LPTSTR)szDev,ARRAYSIZE(szDev),TEXT("dwSelection %d\r\n"),lpC->dwSelection); OutputDebugString((LPTSTR)szDev); StringCchPrintf((LPTSTR)szDev,ARRAYSIZE(szDev),TEXT("dwPageStart %d\r\n"),lpC->dwPageStart); OutputDebugString((LPTSTR)szDev); StringCchPrintf((LPTSTR)szDev,ARRAYSIZE(szDev),TEXT("dwPageSize %d\r\n"),lpC->dwPageSize); OutputDebugString((LPTSTR)szDev); GlobalFree((HANDLE)lpC); } } #endif if (fShowCand && (lParam == 0x01)) { DWORD dwSize; if (!lpCandList) lpCandList = (LPCANDIDATELIST)GlobalAlloc(GPTR,sizeof(CANDIDATELIST)); hIMC = ImmGetContext(hWnd); if (dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0)) { GlobalFree((HANDLE)lpCandList); lpCandList = (LPCANDIDATELIST)GlobalAlloc(GPTR,dwSize); ImmGetCandidateList(hIMC,0x0,lpCandList,dwSize); } else { memset(lpCandList, 0, sizeof(CANDIDATELIST)); } InvalidateRect(hWndCandList,NULL,TRUE); UpdateWindow(hWndCandList); ImmReleaseContext(hWnd,hIMC); } else { return (DefWindowProc(hWnd, message, wParam, lParam)); } break; case IMN_CLOSECANDIDATE: if (fShowCand && (lParam == 0x01)) { if (!lpCandList) { lpCandList = (LPCANDIDATELIST)GlobalAlloc(GPTR,sizeof(CANDIDATELIST)); } memset(lpCandList, 0, sizeof(CANDIDATELIST)); InvalidateRect(hWndCandList,NULL,TRUE); UpdateWindow(hWndCandList); } else { return (DefWindowProc(hWnd, message, wParam, lParam)); } break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } return 0; }
/** * ダイアログのプロシージャ。 * @param [in] hDlg ダイアログボックスのハンドルが格納されています * @param [in] uMsg メッセージが格納されています * @param [in] wParam メッセージの追加情報が格納されています * @param [in] lParam メッセージの追加情報が格納されています * @return メッセージを処理した場合は 0 以外(TRUE)、そうでなければ 0(FALSE) */ static BOOL CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static HWND hwndComboBox = NULL; static HWND hwndEdit = NULL; static LRESULT selectedIndex = CB_ERR; static int length = 0; char *imeControl = NULL; switch (uMsg) { case WM_INITDIALOG: center_window(hDlg); hwndComboBox = GetDlgItem(hDlg, IDC_COMBO1); SendMessage(hwndComboBox, CB_LIMITTEXT, 0, 0); hwndEdit = GetWindow(hwndComboBox, GW_CHILD); SetFocus(hwndComboBox); SetFocus(GetDlgItem(hDlg, IDC_COMBO1)); for (unsigned int i = 0; i < history.size(); i++) { SendMessage(hwndComboBox, CB_INSERTSTRING, i, (LPARAM)history[i].c_str()); } CheckRadioButton(hDlg, IDC_RADIO1, IDC_RADIO4, selectedRadioButton); CheckDlgButton(hDlg, IDC_CHECK1, selectedCheckBox); if (selectedRadioButton == IDC_RADIO1 || selectedRadioButton == IDC_RADIO2) { EnableWindow(GetDlgItem(hDlg, IDC_CHECK1), FALSE); } if (selectedText.size() != 0) { SetWindowText(hwndEdit, selectedText.c_str()); } if ((imeControl = iniFile->read("IME", "control")) && strcmp(imeControl, "1") == 0) { HIMC hImc; DWORD dwConv, dwSent; hImc = ImmGetContext(hDlg); ImmGetConversionStatus(hImc, &dwConv, &dwSent); if (ImmGetOpenStatus(hImc)) { ImmSetOpenStatus(hImc, false); } ImmReleaseContext(hDlg, hImc); } // SetFocus でフォーカス移動を行った場合は FALSE を返さなければならない return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: EndDialog(hDlg, IDCANCEL); return TRUE; case IDOK: if (IsDlgButtonChecked(hDlg, IDC_RADIO1)) { selectedRadioButton = IDC_RADIO1; } else if (IsDlgButtonChecked(hDlg, IDC_RADIO2)) { selectedRadioButton = IDC_RADIO2; } else if (IsDlgButtonChecked(hDlg, IDC_RADIO3)) { selectedRadioButton = IDC_RADIO3; } else if (IsDlgButtonChecked(hDlg, IDC_RADIO4)) { selectedRadioButton = IDC_RADIO4; } selectedCheckBox = IsDlgButtonChecked(hDlg, IDC_CHECK1); // 設定ファイルに状態を書き出す switch (selectedRadioButton) { case IDC_RADIO1: iniFile->write("Config", "radio", "1"); break; case IDC_RADIO2: iniFile->write("Config", "radio", "2"); break; case IDC_RADIO3: iniFile->write("Config", "radio", "3"); break; case IDC_RADIO4: iniFile->write("Config", "radio", "4"); break; default: iniFile->write("Config", "radio", "1"); break; } if (selectedCheckBox) { iniFile->write("Config", "check", "TRUE"); } else { iniFile->write("Config", "check", "FALSE"); } // 履歴を保存 length = GetWindowTextLength(hwndEdit); if (length != 0) { char *buf = new char[length + 1]; buf[length] = '\0'; GetWindowText(hwndEdit, buf, length + 1); std::string temp = buf; delete[] buf; history.insert(history.begin(), temp); for (unsigned int i = 0; i < history.size() - 1; i++) { for (unsigned int j = i + 1; j < history.size(); j++) { std::string str1 = history[i]; std::string str2 = history[j]; if (str1 == str2) { history[j] = ""; } } } int index = 0; for (unsigned int i = 0; i < MAX_HISTORY && i < history.size(); i++) { if (history[i] != "") { std::string key = "history"; char num[3] = {0}; sprintf_s(num, "%d", index); key += num; iniFile->write("History", key.c_str(), history[i].c_str()); index++; } } } if (length != 0) { EndDialog(hDlg, IDOK); } else { EndDialog(hDlg, IDCANCEL); } return TRUE; case IDC_RADIO1: case IDC_RADIO2: CheckRadioButton(hDlg, IDC_RADIO1, IDC_RADIO4, LOWORD(wParam)); EnableWindow(GetDlgItem(hDlg, IDC_CHECK1), FALSE); return TRUE; case IDC_RADIO3: case IDC_RADIO4: CheckRadioButton(hDlg, IDC_RADIO1, IDC_RADIO4, LOWORD(wParam)); EnableWindow(GetDlgItem(hDlg, IDC_CHECK1), TRUE); return TRUE; case IDC_COMBO1: switch (HIWORD(wParam)) { case CBN_SELCHANGE: // 選択項目が変更されたとき case CBN_EDITUPDATE: // 直接入力で内容が変更されたとき。変更内容が表示される前に呼ばれる case CBN_EDITCHANGE: // 直接入力で内容が変更されたとき。変更内容が表示された後に呼ばれる selectedIndex = SendMessage(hwndComboBox, CB_GETCURSEL, 0, 0); break; } break; default: break; } return FALSE; case WM_TIMER: return FALSE; case WM_CLOSE: EndDialog(hDlg, WM_CLOSE); return TRUE; default: break; } return FALSE; }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CCUI dialog INT_PTR CALLBACK CCUI(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { TCHAR tzStr[MAX_STR]; STATIC CeleMenuBar s_mb; _HandleActivate(hWnd, uMsg, wParam, lParam); switch (uMsg) { case WM_INITDIALOG: g_hWnd = hWnd; s_mb = CeleCtrl::InitDlgBar(hWnd, IDR_MainMenu, TRUE); SetDlgItemText(hWnd, IDC_Path, (PCTSTR) lParam); return TRUE; case WM_SIZE: CeleCtrl::ReSize(hWnd, IDC_Log, lParam); CeleCtrl::ReWidth(hWnd, IDC_Tip, LOWORD(lParam)); CeleCtrl::ReWidth(hWnd, IDC_Path, CeleCtrl::ReLeft(hWnd, IDC_Browse, LOWORD(lParam))); break; case WM_HOTKEY: if (HIWORD(lParam) == VK_TBACK) { HWND hCtrl = GetDlgItem(hWnd, IDC_Path); if (hCtrl != GetFocus()) { SetFocus(hCtrl); SetWindowText(hCtrl, NULL); } else { SHSendBackToFocusWindow(uMsg, wParam, lParam); } } break; case WM_INITMENUPOPUP: if (LOWORD(lParam) == IDCANCEL) { CeleMenu m; HKEY hKey; m = (HMENU) wParam; if (RegOpenKeyEx(HKEY_CLASSES_ROOT, STR_AppName, 0, KEY_ALL_ACCESS, &hKey) == S_OK) { RegCloseKey(hKey); m.Check(IDM_Assoc, TRUE); } else { m.Check(IDM_Assoc, FALSE); } } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_Browse: CeleCtrl::BrowseFile(hWnd, _MakeIntRes(IDC_Path), IDS_Filter); break; case IDC_Path: if (HIWORD(wParam) == EN_CHANGE) { s_mb.EnableButton(IDOK, GetWindowTextLength(GetDlgItem(hWnd, IDC_Path))); } else if (HIWORD(wParam) == EN_SETFOCUS) { DWORD dwConversion, dwSentence; ImmGetConversionStatus(NULL, &dwConversion, &dwSentence); ImmSetConversionStatus(NULL, dwConversion & ~IME_CMODE_NATIVE, NULL); } break; case IDM_Clear: SetDlgItemText(g_hWnd, IDC_Log, NULL); break; case IDM_Assoc: if (TRUE) { CeleMenu m; m = s_mb.GetMenu(IDCANCEL); if (m.IsChecked(IDM_Assoc)) { ASOC(TEXT("!")); ASOC(TEXT("!.reg")); ASOC(TEXT("!.ccs")); ASOC(TEXT("!.provxml")); CeleCtrl::ShowCmdMsg(IDM_Assoc, hWnd, _MakeIntRes(IDS_UnAssoc)); } else { ASOC(TEXT(".ccs")); ASOC(TEXT(".reg")); ASOC(TEXT(".provxml")); CeleCtrl::ShowCmdMsg(IDM_Assoc, hWnd, _MakeIntRes(IDS_Assoc)); } } break; case IDM_Help: return CeleCtrl::DlgBox(hWnd, HELP); case IDM_About: CeleAbout::Show(hWnd); break; case IDOK: if (HIWORD(wParam) == 0) { GetDlgItemText(hWnd, IDC_Path, tzStr, MAX_PATH); Process(tzStr, g_ptzCurFile); break; } case IDCANCEL: case IDM_Exit: EndDialog(hWnd, S_OK); break; } break; } return FALSE; }
LRESULT HandleModeCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) { HIMC hIMC = ImmGetContext(hWndCompStr); DWORD dwConv, dwSent; DWORD dwTemp; ImmGetConversionStatus(hIMC,&dwConv,&dwSent); switch(LOWORD(wParam)) { case IDM_NATIVEMODE: dwTemp = dwConv & ~IME_CMODE_LANGUAGE; switch (dwConv & IME_CMODE_LANGUAGE) { case IME_CMODE_ALPHANUMERIC: dwTemp |= IME_CMODE_NATIVE; break; case IME_CMODE_NATIVE: dwTemp |= (IME_CMODE_NATIVE | IME_CMODE_KATAKANA); break; case (IME_CMODE_NATIVE | IME_CMODE_KATAKANA): /* fall-through */ default: break; } dwConv = dwTemp; break; case IDM_FULLHALF: if (dwConv & IME_CMODE_FULLSHAPE) { dwConv &= ~IME_CMODE_FULLSHAPE; } else { dwConv |= IME_CMODE_FULLSHAPE; } break; case IDM_ROMAN: if (dwConv & IME_CMODE_ROMAN) { dwConv &= ~IME_CMODE_ROMAN; } else { dwConv |= IME_CMODE_ROMAN; } break; case IDM_CHARCODE: if (dwConv & IME_CMODE_CHARCODE) { dwConv &= ~IME_CMODE_CHARCODE; } else { dwConv |= IME_CMODE_CHARCODE; } break; case IDM_HANJA: if (dwConv & IME_CMODE_HANJACONVERT) { dwConv &= ~IME_CMODE_HANJACONVERT; } else { dwConv |= IME_CMODE_HANJACONVERT; } break; case IDM_SOFTKBD: if (dwConv & IME_CMODE_SOFTKBD) { dwConv &= ~IME_CMODE_SOFTKBD; } else { dwConv |= IME_CMODE_SOFTKBD; } break; case IDM_EUDC: if (dwConv & IME_CMODE_EUDC) { dwConv &= ~IME_CMODE_EUDC; } else { dwConv |= IME_CMODE_EUDC; } break; case IDM_SYMBOL: if (dwConv & IME_CMODE_SYMBOL) { dwConv &= ~IME_CMODE_SYMBOL; } else { dwConv |= IME_CMODE_SYMBOL; } break; } ImmSetConversionStatus(hIMC,dwConv,dwSent); ImmReleaseContext(hWndCompStr,hIMC); return 1L; }