簡體   English   中英

MFC CEdit傳遞pParentWnd

[英]MFC CEdit passing pParentWnd

我正在創建一個非常非常簡單的電子表格類型的應用程序。 它具有一個繪制單元格的網格,用戶可以指定單元格類型(文本,復選框,單選按鈕)。

我正在努力使案文解決。 在主要的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);

這是我看到的: 在此處輸入圖片說明

我想如果這是一個家庭作業問題,那么就值得重新發明輪子了。 OTOH,已經有不錯的網格,如codeproject.com上的Chris Maunder的網格。

如果您每次繪制單元格時都在創建CEdit控件,那么您將遇到問題。 基本上,您只想為要編輯的單元格只有一個編輯單元格,而可能沒有其他單元格。 在(編輯控件的)父窗口中,您可能希望使用WS_CLIPCHILDREN進行創建或將其樣式設置為具有WS_CLIPCHILDREN,以便它不會在子編輯控件上繪制或擦除。 您至少可以看到設置樣式標志是否有效。

不要在OnPaint()上創建子窗口,否則會造成災難。 您需要自己繪制,在編輯單個單元格時最多可以重用單個CEdit。

我認為您正在嘗試創建一個網格,其中每個單元格都是控件(窗口),例如,當您在網格中滾動時,網格將沿網格移動。 在顯示半格時,這總是會產生視覺偽影(抖動的運動)並引起問題。

您將需要導出自己的單元格類型,他們自己繪制(可能使用DrawFrameControl()API來處理更復雜的類型),並且在編輯單元格內容時可能會彈出子窗口。 這大致是上述Maunder CGridCtrl使用的設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM