#7482

Yutaka Emura
キーマスター

OTStardustさんは書きました:
横から失礼

このスレ見てプラグインを作ろうとしてたのですが、本体側で対応してくれるのならプラグインいらないですね。

こっちでは機能するようになったので、ソースの一部を張っときます。

case WM_IME_REQUEST:
if( wParam == IMR_DOCUMENTFEED ){
POINT_PTR pos;
Editor_GetCaretPos( hwnd, POS_LOGICAL_W, &pos );
GET_LINE_INFO inf;
inf.cch = 0;
inf.flags = FLAG_LOGICAL;
inf.yLine = pos.y;
UINT_PTR size( Editor_GetLineW( hwnd, &inf, NULL ) );
inf.cch = size + 32;
wchar_t* buf( (wchar_t*)_alloca( inf.cch * sizeof(wchar_t) ) );
if( buf ){
Editor_GetLineW( hwnd, &inf, buf );
size_t len( wcslen(buf) );
/* wchar_t str[30];
swprintf_s( str, L” %d”, lParam );
wcscat_s( buf, inf.cch, str );
MessageBox( hwnd, buf, L””, MB_OK );/**/
if( lParam ){
RECONVERTSTRING* rcs( (RECONVERTSTRING*)lParam );
memset( rcs, 0, sizeof(RECONVERTSTRING) );
rcs->dwSize = sizeof(RECONVERTSTRING);
rcs->dwStrOffset = sizeof(RECONVERTSTRING);
rcs->dwStrLen = (DWORD)len;
rcs->dwTargetStrOffset = (DWORD)(min( (size_t)max( pos.x, 0 ), len ) * sizeof(wchar_t));
wcscpy_s( (wchar_t*)(rcs + 1), len + 1, buf );
}
return sizeof(RECONVERTSTRING) + (len + 1) * sizeof(wchar_t);
}
}
break;

このソースはUnicode版のものです。
多分に余計なものも含まれてるでしょうが、私のところではこれで、32bit,64bitともに動いてます。

参考になりますでしょうか・・・

ありがとうございます。まったく同じようにやっているはずなのですが、私の手元の MS-IME (Windows Vista 64bit に付属) ではうまくいかなかったです。これから他の環境でもテストしてみます。ちなみに、どういう環境でうまくいきましたか? OS、ATOK (MS-IME) のバージョンを教えていただけますか?