none
嵌入到CDockablePane中的CFormView派生类,刷新不及时,如何解决? RRS feed

  • 问题

  • 我的MDI程序中,一个拖拽窗口CDockablePane里面是一个CFormView,通过资源管理器绘制创建。里面有一些RadioButton。

    但是程序启动时,这些RadioButton不能完全显示,也没有被遮挡就是不现实。需要鼠标到上面扫一下,就逐步有RadioButton显示出来了。

    这个是什么原因,怎么解决?

    2016年11月22日 10:51

答案

全部回复

  • 您的RadioButton是怎么创建的?它们的父窗口是CFormView吗?

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2016年11月22日 11:01
    版主
  • RadioButton是在资源文件中创建的。

    父窗口应该是自己的派生自CFormView的类。

    不过这个派生类又被封装在CDockablePane中,作为派生类的一个私有变量。

    在CDockablePane的派生类CDirDock的构造函数通过CRuntimeClass.CreateObject创建CDirFormView的实例。

    m_pManualForm = (xmManualForm*)(RUNTIME_CLASS(xmManualForm)->CreateObject());

    然后在CDirDock的OnCreate函数里创建:

    int xmPane::OnCreate(LPCREATESTRUCT lpCreateStruct){

    RECT rect;

    GetClientRect(&rect);

    m_pManualTradeForm->Create(this, rect);

    return 0;

    }


    2016年11月23日 5:11
  • Hi BruceLiu_sh,

    感谢在MSDN论坛发帖。

    >>但是程序启动时,这些RadioButton不能完全显示,也没有被遮挡就是不现实。需要鼠标到上面扫一下,就逐步有RadioButton显示出来了。

    这个是什么原因,怎么解决?

    对于这种情况,建议你将这些Radio Button整理成一个Group。并且在创建CFormView时,调用UpdateData函数。

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年12月2日 8:54
  • Radio分为三组,设置了Group属性和Taborder。但是没用分组框。

    在OnInitialUpdate之后调用了UpdateData(TURE),也试了UpdateData(FALSE),还是不行。只有RadioButton不刷新,需要鼠标扫一下。

    另外,我在DoDataExchange中设置的是直接到基础类型的变量,没有到控件

    DDX_Radio(pDX, IDC_BDB_RADIO_BUY, m_nDirectionFlag);

    2016年12月4日 7:04
  • 我又在派生FormView的OnInitialUpdate的最后,强制刷新,结果还是不行。7个RadioButton只显示2个。

            CRect rect;

    GetClientRect(rect);

    InvalidateRect(rect, TRUE);

    或         Invalidate(TRUE);


    2016年12月4日 7:18
  • Hi BruceLiu_sh,

    你可以尝试在DoDataExchange中这样设置。

    CDialogEx::DoDataExchange(pDX);
    
    DDX_Radio(pDX, IDC_RADIO1, m_Radio1);

    详细使用方法,请参考以下文档。

    http://blog.csdn.net/jiangqin115/article/details/45176961

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年12月30日 3:01
  • 这个问题解决了,把控件的Transparnet属性设置为False即可。
    2017年2月13日 3:43