WinXP SP3 VC++2005 MFC ダイアログベース
Endyです。
Msflexgridを用い文字入力を行なうプログラムを作成しています。
現在、KeyDownイベントにて、半角英数字表示はできております。
しかし、全角入力ができません。
ネットで検索してみましたが、解決方法がわからない状態です。
どなたか、ご教授よろしくお願いします。
以下、作成したKeyDownイベントのソースです。
void CDriverManageDlg::KeyDownMsflexgridNote(short* KeyCode, short Shift)
{
// TODO: ここにメッセージ ハンドラ コードを追加します。
CString strText = m_grid_note.get_Text();
CString strInput;
if ((0x30 <= *KeyCode) && (*KeyCode <= 0x39))//数字
{
if (m_bInitGrid)
{
strText = _T(");
m_bInitGrid = false;
}
strInput.Format(_T(%c), *KeyCode);
InputGridNote(strText, strInput);
}
else if ((VK_NUMPAD0 <= *KeyCode) && (*KeyCode <= VK_NUMPAD9))//数字
{
if (m_bInitGrid)
{
strText = _T(");
m_bInitGrid = false;
}
strInput.Format(_T(%c), (*KeyCode - 0x30));
InputGridNote(strText, strInput);
}
else if ((0x41 <= *KeyCode) && (*KeyCode <= 0x5a))//英数字
{
if (m_bInitGrid)
{
strText = _T(");
m_bInitGrid = false;
}
strInput.Format(_T(%c), *KeyCode);
InputGridNote(strText, strInput);
}
else if (*KeyCode == VK_BACK) // BackSpace
{
CString strCell = m_grid_note.get_Text();
strText = strCell.Left(strCell.GetLength() - 1);
m_grid_note.put_Text(strText);
m_bInitGrid = false;
}
else if (*KeyCode == VK_DELETE) // Delete
{
strText = _T(");
m_grid_note.put_Text(strText);
}
else if(*KeyCode == VK_DECIMAL || *KeyCode == 0xbe)//小数点
{
TRACE(小数点押されたよ\n);
strText += .;
m_grid_note.put_Text(strText);
m_bInitGrid = false;
}
else if(*KeyCode == 0xbd || *KeyCode == VK_SUBTRACT)
{
TRACE(-押されたよ\n);
strText += -;
m_grid_note.put_Text(strText);
m_bInitGrid = false;
}
}
void CDriverManageDlg::InputGridNote(LPCTSTR lpszText, LPCTSTR lpszInput)
{
CString strNewText = lpszText;
strNewText+=lpszInput;
m_grid_note.put_Text(strNewText);
// ブロック入力
int nSelectRow = m_grid_note.get_RowSel();
int nSelectCol = m_grid_note.get_ColSel();
if ((nRow == nSelectRow) && (nCol == nSelectCol)) return;
CPoint ptStart, ptEnd;
ptStart.x = (nCol <= nSelectCol) ? nCol : nSelectCol;
ptStart.y = (nRow <= nSelectRow) ? nRow : nSelectRow;
ptEnd.x = (nCol >= nSelectCol) ? nCol : nSelectCol;
ptEnd.y = (nRow >= nSelectRow) ? nRow : nSelectRow;
for (int i = ptStart.x; i <= ptEnd.x; i++)
{
for (int j = ptStart.y; j <= ptEnd.y; j++)
{
m_grid_note.put_TextMatrix(j, i, strNewText);
}
}
}
hさん
ありがとうございました!
全角入力できるようになりました!