WEB开发网
开发学院手机开发Windows Mobile 开发 Windows Mobile 使用GDI实现BUTTON效果 阅读

Windows Mobile 使用GDI实现BUTTON效果

 2010-08-23 05:19:00 来源:WEB开发网   
核心提示:HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemDc,hUpBitmap[nSel]);BITMAP bm;GetObject(hDownBitmap[m_nCurrentCount], sizeof(bm), &bm);StretchBlt(hdc, rcSel.left, r

HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemDc,hUpBitmap[nSel]);

BITMAP bm;

GetObject(hDownBitmap[m_nCurrentCount], sizeof(bm), &bm);

StretchBlt(hdc, rcSel.left, rcSel.top, rcSel.right - rcSel.left, rcSel.bottom - rcSel.top, &dcSrc, 0, 0, nWidthOld, nHeightOld, SRCCOPY);

SelectObject(hMemDc, hOldBmp);

DeleteDC(hMemDc);

}

void MyButton::SetUpButtonImage(HWND hWnd, int nPreSel)

{

HDC hdc = GetDC(hWnd);

CRect rcSel;

rcSel = rc[nSel];

// 利用双缓冲绘图

HDC hMemDc = CreateCompatibleDC(hdc);

HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemDc,hUpBitmap[nSel]);

BITMAP bm;

GetObject(hDownBitmap[m_nCurrentCount], sizeof(bm), &bm);

StretchBlt(hdc, rcSel.left, rcSel.top, rcSel.right - rcSel.left, rcSel.bottom - rcSel.top, &dcSrc, 0, 0, nWidthOld, nHeightOld, SRCCOPY);

SelectObject(hMemDc, hOldBmp);

DeleteDC(hMemDc);

}

int MyButton::OnClick(IN HWND hwnd, IN CPoint pt) // 捕捉点击消息

{

int nClicked = -1; // 选中的图标

for ( int n = 0; n < m_nCountTool; n ++)

{

if ( m_Rect[n].PtInRect(pt))

{

nClicked = n;

break;

}

}

if ( -1 == nClicked )

{

return -1;

}

else

{

m_nCurrentSel = nClicked;

SetDownImage(hwnd, m_nCurrentSel); // 设置当前选中图标

SetUpImage(hwnd, m_nCurrentSel); // 恢复上一级选中图标的状态

InvalidateRect(hwnd, rc[m_nCurrentSel], TRUE); // 刷新选中范围

InvalidateRect(hwnd, rc[m_nPreSel], TRUE); // 刷新上一级选中范围

}

}

以上思路实现的BUTTON效果,简单点来说,就是捕捉用户按下松开的消息,改变对应位置的图标,看起来有点像BUTTON的效果,但是相对BUTTON来说,这种方法比较简洁,同时可以增加更多的功能,例如,用户按下某个图标,图标产生旋转,缩放或者闪烁,发出声音等等效果。设计程序就更加灵活了。

上一页  1 2 3 

Tags:Windows Mobile 使用

编辑录入:coldstar [复制链接] [打 印]
赞助商链接