ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MFC,movewindow显示不出来按钮问题

2019-12-25 10:05:55  阅读:249  来源: 互联网

标签:rtCtrl bottom items movewindow _. MFC right 按钮 left


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);
}

 

 

标签:rtCtrl,bottom,items,movewindow,_.,MFC,right,按钮,left
来源: https://www.cnblogs.com/XiHua/p/12095082.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有