Msflexgrid 全角入力の方法

[戻る]
Endy 2008/10/17(金) 17:09:00
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 2008/10/17(金) 18:02:21
ここ
http://7ujm.net/C++/FlexGrid.html

Endy 2008/10/20(月) 09:30:05
[[解決]]
hさん

ありがとうございました!
全角入力できるようになりました!

古いスレッドには追加発言できません。