非常に単純なスプレッドシート タイプのアプリケーションを作成しています。セルを描画するグリッドがあり、ユーザーはセルの種類 (テキスト、チェック ボックス、ラジオ ボタン) を指定できます。
私はテキストを解決しようとしています。メインの View クラスには次のものがあります。
void CSpreadView::OnInsertText()
{
CEdit* pEdit = new CEdit;
CWnd* pParentWnd = this;
grid.CellType(pEdit, pParentWnd);
Invalidate();
UpdateWindow();
}
別のクラスにいる場合、親ウィンドウを見つける方法があるかどうかわからないため、親ウィンドウを渡します。
したがって、それを受け取る関数:
void Grid::CellType(CEdit* pEdit, CWnd* pParentWnd)
{
for (int a=0; a<(int) cells.size(); a++)
{
if(cells[a]->selected)
cells[a]->Type(pEdit, pParentWnd);
}
}
最後に、セルが描画されると、次のようになります。
if(type=="text")
{
CEdit* pEdit = new CEdit;
pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(x1+10, y1+10, x2-10, y2-10), pParentWnd, 1);
}
問題: 実際にはボックスを描画しますが、テキストは見えません。入力すると点滅しますが、停止すると消えます。なぜこれが起こっているのか誰にも分かりますか?
ご存知のように、ユーザーは行と列を追加/削除できるため、セルのタイプを制御して描画を行いたいと思います。つまり、以前に描画されたテキスト ボックスを追跡する必要はありません。グリッドは次のように描画されます。
CBrush brush(RGB(color, color, color));
pDC->SelectObject(&brush);
pDC->Rectangle(x1, y1, x2, y2);
これは私が見るものです: