トップページ > 記事閲覧
MakeKeyInputの第5引数
名前:Ketty 日時: 2015/06/04 13:11

管理人様 いつも楽しくDXライブラリを利用させていただいています(^^) 報告なのですが、 MakeKeyInputの第5引数DoubleCharOnlyFlagをTRUEにすると、 GetKeyInputStringで入力文字列を取得できません。 症状は、 バージョン3.14aで発生しますが、 バージョン3.13dでは発生しません。 3.13e以降でDXライブラリ内部での文字コードの扱いが 変わったことによるものかなと推測しています。 ■環境 Windows7 Home Edition Visual Studio 2012 Express for Windows Desktop DXライブラリ Ver.3.14a ■再現ソース #include <DxLib.h> #include <string> #include <Imm.h> #pragma comment(lib, "imm32.lib") // 文字列用のバッファサイズ static const unsigned int BUF_SIZE = 256 ; // (自作関数)IMEを自動的に全角ひらがなに変更する void SetIMEZenkakuHiragana() { HIMC hImc = ::ImmGetContext( DxLib::GetMainWindowHandle() ) ; ::ImmSetOpenStatus( hImc, TRUE ) ; DWORD dwConversion = 0 ; DWORD dwSentence = 0 ; // 現在の変換状態を取得 ::ImmGetConversionStatus( hImc, &dwConversion, &dwSentence ) ; // 全角ひらがな dwConversion |= IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE ; dwConversion &= ~IME_CMODE_KATAKANA ; // 変換状態を再設定 ::ImmSetConversionStatus( hImc, dwConversion, dwSentence ) ; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // 初期設定 DxLib::ChangeWindowMode( TRUE ) ; // 初期化 if( DxLib::DxLib_Init() != 0 ){ return -1 ; } // 裏画面設定 DxLib::SetDrawScreen( DX_SCREEN_BACK ) ; // フォントハンドル const int fontHandle = DxLib::CreateFontToHandle( "メイリオ", 22, 0, DX_FONTTYPE_ANTIALIASING_4X4, DX_CHARSET_SHFTJIS ) ; const int fontColor = DxLib::GetColor( 255, 255, 255 ) ; // IME使う DxLib::SetUseIMEFlag( TRUE ) ; // (自作関数)IMEを自動的に全角ひらがなに変更する SetIMEZenkakuHiragana() ; // キー入力ハンドルを作成 ※全角文字のみ const int KHandle = DxLib::MakeKeyInput( BUF_SIZE, FALSE, FALSE, FALSE, TRUE ) ; // キー入力ハンドルをアクティブにする DxLib::SetActiveKeyInput( KHandle ) ; // 入力文字列用のバッファ char CharBuf[BUF_SIZE] ; // メインループ while( DxLib::ProcessMessage() == 0 && DxLib::CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { // 画面クリア DxLib::ClearDrawScreen() ; // キー入力ハンドルから入力文字列を取得する DxLib::GetKeyInputString( CharBuf, KHandle ) ; // 入力文字列を描画 DxLib::DrawStringToHandle( 0, 0, CharBuf, fontColor, fontHandle ) ; // 入力が終了しているかチェックする const int chk = DxLib::CheckKeyInput( KHandle ) ; if( chk == 1 ) { DxLib::DrawStringToHandle( 0, 40, "入力完了", fontColor, fontHandle ) ; } // 画面フリップ DxLib::ScreenFlip() ; // 適当なウェイト ::Sleep( 16 ) ; } // 終了 DxLib::DxLib_End() ; return 0 ; }
メンテ

Page: 1 |

Re: MakeKeyInputの第5引数 ( No.1 )
名前:管理人 日時:2015/06/05 02:00

ご指摘ありがとうございます、載せていただいたソースで手元でも現象を確認できました ご推察の通り内部の文字コードの扱いを変更したことに因るものです 何度も申し訳ありません orz 修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: MakeKeyInputの第5引数 ( No.2 )
名前:Ketty(解決) 日時:2015/06/05 17:16

管理人様 いつも素早いご対応ありがとうございます。 VisualC++ 用で正常に動作することを確認できましたm(__)m 解決とさせていただきます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存