解决方案 »

  1.   

    用SetWindowPos试试
    ::SetWindowPos(hWnd, 0, 0, 0, 0, 0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_SHOWWINDOW);
      

  2.   

    没用. 
    我还试过ModifyStyle,强行加WS_VISIBLE属性也不行, 第一次加仍然失败,不连续的第二次调用才能成功.SetWindowLong也一样, 都不行.
      

  3.   

    一下,为什么不加WS_VISIBLE呢?其实你第二句话,我理解了很久
      

  4.   

    应该不会
    Btnx.ShowWindow(SW_SHOW);
    Btnx.ShowWindow(SW_HIDE);
      

  5.   

    不加WS_VISIBLE是想初始化时不显示它(虽然可以创建后再隐藏).
    第二句话,就是说的逻辑了, 点击最大化, 窗口最大化后, 最大化按钮应该被隐藏,而还原按钮现在应该被显示出来, 结果点击了最大化按钮后,窗口最大化了, 最大化按钮已经隐藏了, 但是还原按钮却没有显示出来?
    如果这个时候,再在其它按钮的响应函数中, 再调用一个还原按钮的ShowWindow就能把按钮显示出来
    不会
      

  6.   

    不加WS_VISIBLE是想初始化时不显示它(虽然可以创建后再隐藏).
    第二句话,就是说的逻辑了, 点击最大化, 窗口最大化后, 最大化按钮应该被隐藏,而还原按钮现在应该被显示出来, 结果点击了最大化按钮后,窗口最大化了, 最大化按钮已经隐藏了, 但是还原按钮却没有显示出来?
    如果这个时候,再在其它按钮的响应函数中, 再调用一个还原按钮的ShowWindow就能把按钮显示出来
    不会怪我没说清楚,我是说不会有你说的问题,我这测试
    Btnx.ShowWindow(SW_SHOW);//能将隐藏的显示
    Btnx.ShowWindow(SW_HIDE);//能将显示的隐藏
      

  7.   


    你的按钮是Create创建的吗? 我是Create创建的, 并且还发现在Create成功后, 马上调用EnableWindow(FALSE)也会失败, 不是禁用.
      

  8.   

    void CTestDlg::OnBnClickedButton6()
    {
    // TODO: 在此添加控件通知处理程序代码
    CRect r(10,10,200,40);
    if(!m_BtnA.m_hWnd)
    m_BtnA.Create(_T("新建按键"),WS_CHILD|BS_PUSHBUTTON,r,this,1000765);
    if(m_BtnA.IsWindowVisible())
    m_BtnA.ShowWindow(SW_HIDE);
    else
    m_BtnA.ShowWindow(SW_SHOW);
    }
      

  9.   

    Create时父窗口没写对有可能出现这种问题。
    我前段时间写个在树形控件里弹出popmenu的程序。Create POPMenu是如果父窗口写当前对话框,那之前对Menu里各项的可见设置就会都失效;如果父窗口指定为树形控件,就正常了。
    希望能给你启发。
      

  10.   

    结贴了, MSDN确实没有欺骗我, 是我自己错了.因为我使用的按钮是使用的第三方的, 而第三方的按钮的状态会受皮肤中的属性控制.所以虽然我设置了新的状态,EnableWindow或者ShowWindow时虽然都成功了, 但是它会马上又调用一次恢复成了皮肤中的属性, 但第二次设置时已经不是皮肤中了, 所以会成功.这是为什么连续调用不成功, 放到另一个按钮中,分开点击两次会成功的原因.
    因为连续调用时,管你调用几次, 到皮肤处理那里仍然会被恢复成皮肤中的, 只有皮肤加载并更新一次后,才是正确的属性.感谢各位的回复.