P
Purple
Проблема следующая: DrawButton иногда не успевает отработать. Invalidate(0) вызывается в OnLButtonDown. В OnLButtonUp() CurButton обнуляется и тоже вызывается Invalidate(0). Вопрос - как тут еще можно переделать код, если отрисовка притормаживает.
<!--shcode--><pre><code class='CPP'>HBITMAP hLayout;
CBitmap m_bmpNormal;
COLORREF BkgndPixel;
void CMyPanel::OnPaint()
{
CPaintDC dc(this); // device context for painting
CDC memDc;
if (!memDc.CreateCompatibleDC(&dc)) return;
hLayout = SHLoadDIBitmap (BmpPath);
m_bmpNormal.Attach (hLayout);
HBITMAP m_hOldBitmap = (HBITMAP)::SelectObject(memDc.GetSafeHdc(), m_bmpNormal);
dc.BitBlt(0, 0, 240, 122, &memDc, 0, 0, SRCCOPY);
BkgndPixel = dc.GetPixel (0, 0);
if (CurButton >=0) DrawButton(dc);
::SelectObject(memDc.GetSafeHdc(), m_hOldBitmap);
m_bmpNormal.DeleteObject();
memDc.DeleteDC();
}
void CMyPanel:rawButton(CPaintDC &aDC) //Отрисовка типа нажатой кнопки
{
int x, y, height, width;
/*здесь переменным присваиваются значения*/
CBrush b;
b.CreateSolidBrush (BkgndPixel);
CPen p(PS_NULL, 5, RGB(255,0,0));
aDC.SelectObject(p);
aDC.SelectObject(b);
aDC.Rectangle(x, y, x + width, y + 5);
BLENDFUNCTION blend={AC_SRC_OVER,0,180, 0};
AlphaBlend(aDC, x, y+5, width, 5, aDC, x, y, width, 5, blend);
blend.SourceConstantAlpha = 100;
AlphaBlend(aDC, x, y+10, width, 5, aDC, x, y, width, 5, blend);
}[/CODE]
<!--shcode--><pre><code class='CPP'>HBITMAP hLayout;
CBitmap m_bmpNormal;
COLORREF BkgndPixel;
void CMyPanel::OnPaint()
{
CPaintDC dc(this); // device context for painting
CDC memDc;
if (!memDc.CreateCompatibleDC(&dc)) return;
hLayout = SHLoadDIBitmap (BmpPath);
m_bmpNormal.Attach (hLayout);
HBITMAP m_hOldBitmap = (HBITMAP)::SelectObject(memDc.GetSafeHdc(), m_bmpNormal);
dc.BitBlt(0, 0, 240, 122, &memDc, 0, 0, SRCCOPY);
BkgndPixel = dc.GetPixel (0, 0);
if (CurButton >=0) DrawButton(dc);
::SelectObject(memDc.GetSafeHdc(), m_hOldBitmap);
m_bmpNormal.DeleteObject();
memDc.DeleteDC();
}
void CMyPanel:rawButton(CPaintDC &aDC) //Отрисовка типа нажатой кнопки
{
int x, y, height, width;
/*здесь переменным присваиваются значения*/
CBrush b;
b.CreateSolidBrush (BkgndPixel);
CPen p(PS_NULL, 5, RGB(255,0,0));
aDC.SelectObject(p);
aDC.SelectObject(b);
aDC.Rectangle(x, y, x + width, y + 5);
BLENDFUNCTION blend={AC_SRC_OVER,0,180, 0};
AlphaBlend(aDC, x, y+5, width, 5, aDC, x, y, width, 5, blend);
blend.SourceConstantAlpha = 100;
AlphaBlend(aDC, x, y+10, width, 5, aDC, x, y, width, 5, blend);
}[/CODE]