先ほどの続きです。
以下がソースコードです。
/*
DebugText()関数は自作のデバッグ用関数。デバッグ用ダイアログボックスのテキストボックスに文字列を追加する。
*/
LRESULT CTheView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message == WM_CHAR){
BYTE c;
c = (BYTE)wParam;
BOOL bIsDBCS = (BYTE)IsDBCSLeadByte(c);
DebugText("0 : %02x , %d\r\n" , c , bIsDBCS);
if(m_bIsDBCS){
short s = (m_cByte1 | c << 8);
char ch[sizeof(short)+1];
ZeroMemory(ch , sizeof(ch));
StringCchCat(ch , sizeof(ch) , (const char *)&s);
BYTE *p_s = (BYTE *)&s;
DebugText("文字 : %s\r\n" , (char *)ch);
DebugText("1 : %02x , %02x\r\n" , m_cByte1 , c);
DebugText("2 : %02x , %02x\r\n" , p_s[0] , p_s[1]);
int str_len = 2;
WORD *pwType = new WORD[str_len];
GetStringTypeEx(LOCALE_SYSTEM_DEFAULT , CT_CTYPE3 , (LPCTSTR)ch , -1 , pwType);
DebugText("3 : pwType[0] = %04x , pwType[1] = %04x\r\n" , pwType[0] , pwType[1]);
/*
C3_NONSPACING 0x0001 非スペース符号
C3_DIACRITIC 0x0002 分音符
C3_VOWELMARK 0x0004 母音字
C3_SYMBOL 0x0008 シンボル文字
C3_KATAKANA 0x0010 カタカナ
C3_HIRAGANA 0x0020 ひらがな
C3_HALFWIDTH 0x0040 全角文字
C3_FULLWIDTH 0x0080 半角文字
C3_IDEOGRAPH 0x0100 表意文字
C3_KASHIDA 0x0200 アラビックカシダ文字
C3_LEXICAL 0x0400 単語の一部と見なされる区切り記号(カシダ、ハイフン、女性/男性オーディナル、等号、その他)
C3_ALPHA 0x8000 言語学上のすべての文字(アルファベット、音節文字、表意文字)
*/
if(pwType[0] == (C3_ALPHA | C3_FULLWIDTH | C3_KATAKANA)){ //pwType[0] == 0x8090
DebugText("4 : 全角カタカナです\r\n");
}
delete [] pwType;
m_str += ch;
m_bIsDBCS = FALSE;
Invalidate();
}else{
if(bIsDBCS){
//c = 2 バイト文字セット(DBCS)の第 1 バイト
m_bIsDBCS = TRUE;
m_cByte1 = c;
}else{
//c = 2 バイト文字セット(DBCS)の第 1 バイトではない。
m_bIsDBCS = FALSE;
}
}
}
return CView::WindowProc(message, wParam, lParam);
}
お礼
ご回答頂き誠にありがとうございます。 漢字に変換する際のビット演算の解説、とても参考になりました。 miswaki7Zさんには本当にお世話になりっぱなしで申し訳ないです。 しかし、なにぶん、私はC言語しかわからない若輩者なので、 C++のコードから、Cのコードに変換するという作業は少々、辛いものがあり、今回質問を刷新して、投稿し直してみる所存であります。 miswaki7Zさんには本当にお世話になりました。 心より感謝と謝罪の念でいっぱいです。 本当に申し訳ございませんでした。