none
百思不解之无控件纯图片三态按钮 RRS feed

  • 常规讨论

  • VS2012——MFC生成一个对话框程序,去除了标题栏和边框,用CImage把一个画有三个同样大小按钮图形的PNG文件Draw到对话框右上角代表关闭按钮,没有任何控件,如何实现3态变换,就是当鼠标移到右上角那个区域时绘制这个PNG文件的第二个图形,当鼠标按下时绘制这个PNG文件的第三个图形,,,(我用Spy++看了下360,瑞星等这些软件的关闭和最小化等按钮不是用的Button控件,因为Spy++扫上去什么也没有)谢谢!!!
    我为这个问题困扰了好几天,实在想不出什么好办法了,网上查了好几天也没结果,是这样的啊:首先我这是个MFC对话框程序,去除了标题栏和边框,没用任何按钮等控件....我首先这样:
    void C123Dlg::OnPaint()
    CPaintDC mWndDC(this);
    //SendMessage(WM_ERASEBKGND, reinterpret_cast<WPARAM>(mWndDC.GetSafeHdc()), 0);
    CRect mWndRect;
    GetClientRect(&mWndRect);
    CImage mWndbkPic;
    mWndbkPic.Load(L"C:\\主窗口背景.jpg");
    mWndbkPic.Draw(mWndDC,mWndRect);
    mWndbkPic.Destroy();
    //以上代码绘制了主窗口背景,接下来我又这样:
    CImage bClosePic;
    bClosePic.Load(L"C:\\Close.png");
    bClosePic.Draw(mWndDC,798,0,47,22,0,0,47,22);
    //接下来我又在OnMouseMove里进行行鼠标指针位置的判断:
    void C123Dlg::OnMouseMove(UINT nFlags, CPoint point)
    {
    if((point.x > 798 && point.x < 810) && (point.y > 0 && point.y < 22))
    {
    //这里不知怎么写了,我试着写了CImage bClosePic;bClosePic.Load(L"C:\\Close.png");bClose //Pic.Draw(mWndDC,798,0,47,22,47,0,47,22);但当鼠标移到上述条件区域没有变化,我也想过把Draw函数中的源图片左上角坐标设两个全局变量在这里修改,但定义时不让初始化,如果在Onpaint里初始化的话一调用又成初值了,,,我又想:能不能把Onpaint重载下呢,不知行不行,我又开始怀疑这种不用控件只用图片能不能实现关闭按钮的三态变换呢,哎,,,求助啊,,大神们
    }

    CDialogEx::OnMouseMove(nFlags, point);
    }

    因此,,,求助啊,我一个人搞硬件的,没有搞软件的同事啊,求助啊,,,
    2012年11月12日 6:08

全部回复

  • 都是有自己的界面库,有机会看看Direct UI,QQ和飞信都是这样的用自己的界面库进行开发的...举个例子,你打开飞信的fxWebBrowser.exe 在任务管理器中将其干掉,之后就会有意外收获
    2012年11月13日 8:20