2018年01月28日

国木田花丸モデル制作中

ずら丸ちゃん作る。

zura1.jpg

zura2.jpg

zura3.jpg

zura4.jpg

ずら丸が美少女過ぎたので作らざるを得ませんでした。

顔のベースはほぼ完成しています。今は表情を作っているところです。髪と衣装は今のところは適当です。
衣装は制服(夏服)になる予定。確実に完成させたいので布は少なめで。

公開については完成してから決める予定です。ジャックさんがエターなったので、いろいろと前向きな方向で検討しております。

posted by gency at 02:24| Comment(0) | モデリング

2018年01月23日

WindowsのSDL2でIMEの変換候補リストを取得するコード

WindowsのSDL2のIMEヘルパーが変換候補リストを表示してくれないので、IMEを叩いて変換候補リストを取得してみました。


void getCandidateList(SDL_Window* window, std::vector<std::wstring>& candidate_list)
{
SDL_SysWMinfo window_info;
SDL_VERSION(&window_info.version);
SDL_GetWindowWMInfo(window, &window_info);
HWND hwnd = window_info.info.win.window;
HIMC himc = ImmGetContext(hwnd);

DWORD dwsize = ImmGetCandidateList(himc, 0, nullptr, 0);
if (dwsize == 0) return;

HGLOBAL hmem = (LPCANDIDATELIST)GlobalAlloc(GHND, dwsize);
if (hmem == NULL) return;

LPCANDIDATELIST lpcdl = (LPCANDIDATELIST)GlobalLock(hmem);
ImmGetCandidateList(himc, 0, lpcdl, dwsize);

candidate_list.resize(lpcdl->dwCount);
for (int i = 0; i < lpcdl->dwCount; ++i)
candidate_list[i] = (wchar_t*)((char*)lpcdl + lpcdl->dwOffset[i]);

GlobalFree(hmem);
}


コードは下記のサイトを参考にさせて頂きました。
http://www.kumei.ne.jp/c_lang/sdk3/sdk_282.htm

参考サイトのコードはそのままだと自動構文解析エラーが出ていたので、色々と修正してあります。

↓は応用例。

sdl_candidate_list.gif

OSはWindows10Home64bit、MSVCのエディタ文字コードはUTF-8(BOMなし)で動作確認しています。

入力コンテキストの作成と削除やIMEのオン・オフの切り替えはSDL2がやってくれるので、これらの処理を自分で書く必要はありません。SDL_StartTextInput()を呼び出した後に上記のコードを実行すれば変換候補リストが取得できます。

IMMの導入方法は、SDL2のIME機能が使えて且つSDL2をスタティックリンクしているなら、imm32.libはすでに追加しているはずなので、この場合は何もする必要はありません。
dllについてはよく分かりませんが、リンクエラーが出るならimm32.libを追加すればよいかと思います。


以上です。

(*´Д`*)ああああありがとうございました。
posted by gency at 02:11| Comment(0) | 3DProgramming