如何在纯代码编写的按钮中插入位图

怎么在纯代码编写的按钮中插入位图?
本帖最后由 VisualEleven 于 2014-08-07 08:52:28 编辑
1、这个是代码
m_button.Create("PEQ", WS_CHILD | WS_VISIBLE, CPoint(140, 450), c, this, MY_BTN_PEQMIC, 2, RGB(128, 128, 128),RGB(255, 0, 0), RGB(255, 0, 0), GetSysColor(COLOR_BTNFACE));
 

2、编写的按钮可以有那些形状:CreateRectRgn、CreateEllipticRgn?


3、怎么保存按钮按下去的状态,以便显示不同的位图?
比如在如下代码中添加什么?????
 
  if(pMsg->message == WM_LBUTTONDOWN)
    {
        if(pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->m_hWnd)
        {
                    // 按钮按下
       }
    }
    else if(pMsg->message == WM_LBUTTONUP)
    {
        if(pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->m_hWnd)
        {
                    // 按钮弹起
        }
    }



   
------解决方案--------------------
CBitmapButton
------解决方案--------------------
本帖最后由 VisualEleven 于 2014-08-07 08:52:12 编辑
SetWindowLong(..., GWL_WNDPROC, ...)子类化按钮,添加处理WM_DRAWITEM
------解决方案--------------------
http://blog.csdn.net/fishion/article/details/8985414
可以参考下我这里的,绘制异形的话可以用CreateRectRgn、CreateEllipticRgn,CreateRoundRectRgn,然后把位置选入brush里,再用PaintRgn绘制
HBITMAP hBackgroundBitmap = ::LoadBitmap(AfxGetInstanceHandle( ),MAKEINTRESOURCE(IDB_BITMAP1));
HRGN hRgn = ::CreateRoundRectRgn(100,100, 200,200, 10, 10);
HBRUSH hBrush = CreatePatternBrush(hBackgroundBitmap);
HBRUSH hOldBrush = (HBRUSH)SelectObject(dc.m_hDC, hBrush);
PaintRgn(dc.m_hDC, hRgn);
SelectObject(dc.m_hDC, hOldBrush);
DeleteObject(hBrush);
DeleteObject(hRgn);
DeleteObject(LoadBitmap);

------解决方案--------------------
重写 CButton class,然后实现自绘.
最简单的方法就是直接在重写类的 WM_PAINT里面,直接画你需要的东西.
------解决方案--------------------
CBitmapButton 对应几种状态。。。
------解决方案--------------------
引用:
CBitmapButton 对应几种状态。。。