zoukankan      html  css  js  c++  java
  • MFC,movewindow显示不出来按钮问题--ScreenToClient(rect)

    1、CRect rtCtrl;

    rtCtrl位置可能不在对话框内。

     

    2、在BOOL CDlgXXX::OnInitDialog()

    中运用了m_btnClose_.MoveWindow(rtCtrl);

    会相应对话框的void CDlgXXX::OnSize(UINT nType, int cx, int cy)又把按钮位置改变了,所以看不到按钮显示。。。

    解决办法:

    BOOL CDlgXXX::OnInitDialog()
    {
        CBCGPDialog::OnInitDialog();
        SetBackgroundColor(RGB(255, 255, 255));
    
        //m_btnReset_.m_nFlatStyle = CBCGPButton::FlatStyle::BUTTONSTYLE_NOBORDERS;
        //m_btnOK_.m_nFlatStyle = CBCGPButton::FlatStyle::BUTTONSTYLE_NOBORDERS;
        //m_btnClose_.m_nFlatStyle = CBCGPButton::FlatStyle::BUTTONSTYLE_NOBORDERS;
    
        InitData();
    
        return TRUE;
    }
    
    void CXXX::InitUI()
    {
        if (NULL == m_btnReset_.m_hWnd)
        {
            return;
        }
    
        CRect rtClient;
        GetClientRect(rtClient);
    
        int BTN_WIDTH = 50;
        CRect rtCtrl;    
        rtCtrl.bottom = rtClient.bottom - 5;
        rtCtrl.top = rtCtrl.bottom - 30;    
        rtCtrl.right = rtClient.right - SPACE;
        rtCtrl.left = rtCtrl.right - BTN_WIDTH;    
        m_btnClose_.MoveWindow(rtCtrl);
    
        rtCtrl.right = rtCtrl.left - SPACE;
        rtCtrl.left = rtCtrl.right - BTN_WIDTH;
        m_btnOK_.MoveWindow(rtCtrl);
    
        rtCtrl.right = rtCtrl.left - SPACE;
        rtCtrl.left = rtCtrl.right - BTN_WIDTH;
        m_btnReset_.MoveWindow(rtCtrl);    
    }
    
    void CXXX::OnSize(UINT nType, int cx, int cy)
    {
        CBCGPDialog::OnSize(nType, cx, cy);
        InitUI();
    }
        这句话很重要
    if (NULL == m_btnReset_.m_hWnd) { return; }

    这样按钮就能显示了


    这里initData里是动态加载按钮的一个例子,根据按钮的位置,修改对话框的大小
    void CDlgXXX::InitData()
    {
        vector<combo_data> items;
        m_zj_libmgr->get_all_packages(items);
    
        if (items.size() <= 0)
        {
            return;
        }
        CRect rtClient;
        GetWindowRect(rtClient);
        CRect rtPos = rtClient;
        m_old_package_ = m_package;
        UINT btnId = BTN_ID_BEGIN;
        const int ITEM_HEIGHT = 22;
        UINT nStyle = BS_AUTORADIOBUTTON | BS_PUSHLIKE | WS_GROUP | WS_VISIBLE | BS_CENTER;
        CRect rtCtrl;
        rtCtrl.top = rtPos.top + SPACE;
        rtCtrl.bottom = rtCtrl.top + ITEM_HEIGHT;
        rtCtrl.left = SPACE;
        rtCtrl.right = rtCtrl.left + ITEM_WIDTH;
        CButtonItem *pBtnItem = new CButtonItem();
        pBtnItem->Create(items[0].cName, nStyle, rtCtrl, this, btnId);
        pBtnItem->SetData(items[0].cCode);
        m_map_btns_.insert(make_pair(btnId,  pBtnItem));
        rtPos.bottom = rtCtrl.bottom;
    
        if (items[0].cCode == m_package.cCode)
        {
            pBtnItem->SetCheck(1);
        }
    
        int count = items.size();
        for (int i = 1; i < count; ++i)
        {
            ++btnId;
            if (i % LINE_COUNT == 0)
            {                
                rtCtrl.top = rtCtrl.bottom + SPACE;
                rtCtrl.bottom = rtCtrl.top + ITEM_HEIGHT;
                rtCtrl.left = SPACE;
                rtCtrl.right = rtCtrl.left + ITEM_WIDTH;
    
                rtPos.bottom = rtCtrl.bottom;
            }
            else
            {
                rtCtrl.left = rtCtrl.right + SPACE;
                rtCtrl.right = rtCtrl.left + ITEM_WIDTH;
            }
    
            pBtnItem = new CButtonItem();
            pBtnItem->Create(items[i].cName, nStyle, rtCtrl, this, btnId);
            pBtnItem->SetData(items[i].cCode);
            m_map_btns_.insert(make_pair(btnId,  pBtnItem));
            if (items[i].cCode == m_package.cCode)
            {
                pBtnItem->SetCheck(1);
            }
        }
    
        rtClient.bottom = rtPos.bottom + SPACE + 100;
        MoveWindow(rtClient);
    }
     
  • 相关阅读:
    L-这是最难的题(二分+前缀和)
    SPFA 原理剖析代码实现分析比较
    树状数组---原理代码实现
    bellman-ford算法
    UML用例图总结
    UML类图几种关系的总结
    UML序列图总结
    线段树--Color the ball(多次染色问题)
    临时文档3
    POJ2676-Sudoku(数独)
  • 原文地址:https://www.cnblogs.com/XiHua/p/12095082.html
Copyright © 2011-2022 走看看