void thinkofgrapples() { struct ship *sp, *sq; char friendly; foreachship(sp) { if (sp->file->captain[0] || sp->file->dir == 0) continue; foreachship(sq) { friendly = sp->nationality == capship(sq)->nationality; if (!friendly) { if (sp->file->struck || sp->file->captured != 0) continue; if (range(sp, sq) != 1) continue; if (grappled2(sp, sq)) if (toughmelee(sp, sq, 0, 0)) ungrap(sp, sq); else grap(sp, sq); else if (couldwin(sp, sq)) { grap(sp, sq); sp->file->loadwith = L_GRAPE; } } else ungrap(sp, sq); } } }
thinkofgrapples() { register int n, l, friendly; for (n=0; n < scene[game].vessels; n++){ if (!scene[game].ship[n].file -> captain[0] && pos[n].dir){ for (l=0; l < scene[game].vessels; l++){ if ((friendly = scene[game].ship[l].file -> captured) < 0) friendly = scene[game].ship[n].nationality == scene[game].ship[l].nationality; else friendly = scene[game].ship[n].nationality == scene[game].ship[friendly].nationality; if (!friendly){ if (range(n,l) == 1 && !scene[game].ship[n].file -> struck && scene[game].ship[n].file -> captured < 0){ if (grapple(n,l)) if (toughmelee(n,l,0,0)) ungrap(n, l); else grap(n, l); else if (couldwin(n,l)){ grap(n, l); loadwith[n] = GRAPE; } } } else ungrap(n,l); } } } }
void controlUC::paintBkColor(HDC hDC) { Gdiplus::Graphics grap(hDC); if( m_dwBackColor != 0 ) { gtc::drawer::fillRectangle(grap, m_dwBackColor, m_rcItem); } }
void controlUC::paintBkImage(HDC hDC) { assert(hDC); gtc::image *pImage = nullptr; if (!m_bsBackImage.wsKeyImage.empty() && (pImage = m_pManager->findImage(m_bsBackImage.wsKeyImage))) { Gdiplus::Graphics grap(hDC); gtc::drawer::drawImage(grap, *pImage, m_rcItem, m_bsBackImage.rcScource); //gtc::drawer::drawString(grap, L"12431afasfja;", m_rcItem, m_pManager->getDefaultFontInfo()->hFont, BEAlignModeLeftTop, 0xFFFFFFFF); } }
void animateFrameUC::paintStatusImage(HDC hdc) { assert(hdc && m_pManager); if(!m_pImage) return; if(m_vecFrames.size() <= 0) { WRITE_LOCK m_vecFrames = calculateAreaCell(m_pImage->getImageSize(), rectSize(m_rcItem)); } Gdiplus::Graphics grap(hdc); READ_LOCK if(m_vecFrames.size() <= 0 || m_iFrame >= (int)m_vecFrames.size() || m_iFrame < 0) return; gtc::drawer::drawImage(grap, m_pImage, m_rcItem, m_vecFrames[m_iFrame]); m_iFrame = ++m_iFrame % m_vecFrames.size(); }
Image* BRenderEngineAssist::genScaleImage(LPCTSTR imageFilePath, const SIZE& szImage, const RECT& rcCorner) { Image image(imageFilePath); Bitmap bmp(szImage.cx, szImage.cy); Graphics grap(&bmp); // 紙崙貧何 grap.DrawImage(&image, RectF(0, 0, bmp.GetWidth(), bmp.GetHeight()), 0, 0, rcCorner.left, rcCorner.top, UnitPixel); grap.DrawImage(&image, RectF(0, 0, bmp.GetWidth(), bmp.GetHeight()), rcCorner.left, 0, image.GetWidth() - rcCorner.left - rcCorner.right, rcCorner.top, UnitPixel); grap.DrawImage(&image, RectF(0, 0, bmp.GetWidth(), bmp.GetHeight()), image.GetWidth() - rcCorner.right, 0, rcCorner.right, rcCorner.top, UnitPixel); // 紙崙嶄何 grap.DrawImage(&image, RectF(0, 0, bmp.GetWidth(), bmp.GetHeight()), 0, rcCorner.top, rcCorner.left, image.GetHeight() - rcCorner.top - rcCorner.bottom, UnitPixel); grap.DrawImage(&image, RectF(0, 0, bmp.GetWidth(), bmp.GetHeight()), rcCorner.left, rcCorner.top, image.GetWidth() - rcCorner.left - rcCorner.right, image.GetHeight() - rcCorner.top - rcCorner.bottom, UnitPixel); grap.DrawImage(&image, RectF(0, 0, bmp.GetWidth(), bmp.GetHeight()), image.GetWidth() - rcCorner.right, rcCorner.top, rcCorner.right, image.GetHeight() - rcCorner.top - rcCorner.bottom, UnitPixel); // 紙崙和何 grap.DrawImage(&image, RectF(0, 0, bmp.GetWidth(), bmp.GetHeight()), 0, image.GetHeight() - rcCorner.bottom, rcCorner.left, rcCorner.bottom, UnitPixel); grap.DrawImage(&image, RectF(0, 0, bmp.GetWidth(), bmp.GetHeight()), rcCorner.left, image.GetHeight() - rcCorner.bottom, image.GetWidth() - rcCorner.left - rcCorner.right, rcCorner.bottom, UnitPixel); grap.DrawImage(&image, RectF(0, 0, bmp.GetWidth(), bmp.GetHeight()), image.GetWidth() - rcCorner.right, image.GetHeight() - rcCorner.bottom, rcCorner.right, rcCorner.bottom, UnitPixel); return bmp.Clone(0, 0, bmp.GetWidth(), bmp.GetHeight(), PixelFormat32bppARGB); }
void comboUC::paintStatusImage(HDC hdc) { if( isFocused() ) m_uButtonState |= UCSTATE_FOCUSED; else m_uButtonState &= ~ UCSTATE_FOCUSED; if( !isEnabled() ) m_uButtonState |= UCSTATE_DISABLED; else m_uButtonState &= ~ UCSTATE_DISABLED; Gdiplus::Graphics grap(hdc); RECT rcSrc = {0}; if( (m_uButtonState & UCSTATE_DISABLED) != 0 ) { if (getDisabledImage(rcSrc)) { gtc::drawer::drawImage(grap, m_pImage, m_rcItem, rcSrc); return; } //if( !m_sDisabledImage.IsEmpty() ) { // if( !DrawImage(hDC, (LPCTSTR)m_sDisabledImage) ) m_sDisabledImage.Empty(); // else return; //} } else if( (m_uButtonState & UCSTATE_PUSHED) != 0 ) { if (getPushedImage(rcSrc)) { gtc::drawer::drawImage(grap, m_pImage, m_rcItem, rcSrc); return; } //if( !m_sPushedImage.IsEmpty() ) { // if( !DrawImage(hDC, (LPCTSTR)m_sPushedImage) ) m_sPushedImage.Empty(); // else return; //} } else if( (m_uButtonState & UCSTATE_HOT) != 0 ) { if (getHotImage(rcSrc)) { gtc::drawer::drawImage(grap, m_pImage, m_rcItem, rcSrc); return; } //if( !m_sHotImage.IsEmpty() ) { // if( !DrawImage(hDC, (LPCTSTR)m_sHotImage) ) m_sHotImage.Empty(); // else return; //} } else if( (m_uButtonState & UCSTATE_FOCUSED) != 0 ) { if (getFocusedImage(rcSrc)) { gtc::drawer::drawImage(grap, m_pImage, m_rcItem, rcSrc); return; } //if( !m_sFocusedImage.IsEmpty() ) { // if( !DrawImage(hDC, (LPCTSTR)m_sFocusedImage) ) m_sFocusedImage.Empty(); // else return; //} } if (getNormalImage(rcSrc)) { gtc::drawer::drawImage(grap, m_pImage, m_rcItem, rcSrc); } //if( !m_sNormalImage.IsEmpty() ) { // if( !DrawImage(hDC, (LPCTSTR)m_sNormalImage) ) m_sNormalImage.Empty(); // else return; //} }
void CDlgTipDetail::OnPaint(CDCHandle dc) { PAINTSTRUCT ps; HDC hDC = ::BeginPaint( m_hWnd, &ps ); Gdiplus::Graphics grap(hDC); Gdiplus::Image *pImg = NULL; CDC memDC(hDC); int nDownHeightPos = m_rcClient.Height() - 27; memDC.SetBkMode(TRANSPARENT); pImg = BkPngPool::Get(IDP_VUL_TIP_HEAD); grap.DrawImage(pImg, 0,0); pImg = BkPngPool::Get(IDP_VUL_TIP_DOWN); grap.DrawImage(pImg, 0, nDownHeightPos); pImg = BkPngPool::Get(IDP_VUL_TIP_CLOSE); if (m_nCloseState == -1) { grap.DrawImage(pImg, m_rcCloseBtn.left, m_rcCloseBtn.top); } CRect rcGrant(0,84, DEF_VUL_TIP_DETAIL_WIDTH, nDownHeightPos); _DrawGradualColorRect(memDC, rcGrant,RGB(0xE4, 0xF0, 0xFE), RGB(0xD7, 0xE6, 0xF9), TRUE); _DrawLine(memDC, CPoint(0,0), CPoint(0,m_rcClient.Height()), RGB(0x87, 0x98, 0xA8)); _DrawLine(memDC, CPoint(DEF_VUL_TIP_DETAIL_WIDTH - 1, 0), CPoint(DEF_VUL_TIP_DETAIL_WIDTH - 1, m_rcClient.Height()), RGB(0x87, 0x98, 0xA8)); HFONT hHeadFont = BkFontPool::GetFont(TRUE, FALSE, FALSE, 1); HFONT hNormalFont = BkFontPool::GetFont(FALSE, FALSE, FALSE); CString strTitle; CString strTmp = BkString::Get(IDS_VULFIX_5019); FormatKBString(m_pItemData->nID, strTitle); strTitle = strTmp + _T(":") + strTitle; CRect rcText(13, 10, 220, 25); CRect rcTemp; _DrawText(memDC, rcText, strTitle, RGB(0x0, 0x0, 0x0), hHeadFont); rcText.SetRect(15, 32, 200, 47); strTmp = BkString::Get(IDS_VULFIX_5021); strTitle = strTmp + _T(":") + m_pItemData->strPubDate; _DrawText(memDC, rcText, strTitle, RGB(0x44, 0x61, 0x83), hNormalFont); // 大小 rcText.SetRect(275,32,DEF_VUL_TIP_DETAIL_WIDTH,47); FormatSizeString(m_pItemData->nFileSize, strTitle); strTmp = BkString::Get(IDS_VULFIX_5124); strTitle = strTmp + strTitle; _DrawText(memDC, rcText, strTitle, RGB(0x44, 0x61, 0x83), hNormalFont); // 绘制小点 和 描述文字 pImg = BkPngPool::Get(IDP_VUL_TIP_POINT); CRect rcContent(15, 72, DEF_VUL_TIP_DETAIL_WIDTH, 72 + 15); if (!m_pItemData->strMSID.IsEmpty()) { grap.DrawImage(pImg, rcContent.left, rcContent.top + 5); strTmp = BkString::Get(IDS_VULFIX_5123); strTmp += m_pItemData->strMSID; rcContent.left += 10; _DrawText(memDC, rcContent, strTmp, RGB(0,0,0), hNormalFont); rcContent.top += 17; rcContent.bottom += 17; rcContent.left = 15; rcContent.right = DEF_VUL_TIP_DETAIL_WIDTH; } grap.DrawImage(pImg, rcContent.left, rcContent.top + 5); rcContent.left += 10; strTmp = BkString::Get(IDS_VULFIX_5125); _DrawText(memDC, rcContent, strTmp, RGB(0,0,0), hNormalFont); rcContent.left = rcContent.right; rcContent.right = DEF_VUL_TIP_DETAIL_WIDTH; CString strAff = m_pItemData->strAffects; if (strAff.GetLength() < 25) { _DrawText(memDC, rcContent, strAff, RGB(255, 0, 0), hNormalFont); } else { strTmp = strAff.Mid(0, 25); _DrawText(memDC, rcContent, strTmp, RGB(255, 0, 0), hNormalFont); strAff = strAff.Mid(25); while(1) { if (strAff.GetLength() > 0) { int len = strAff.GetLength(); rcContent.top += 17; rcContent.bottom += 17; rcContent.left = 25; rcContent.right = DEF_VUL_TIP_DETAIL_WIDTH; if (strAff.GetLength() > 30) len = 30; strTmp = strAff.Mid(0, len); _DrawText(memDC, rcContent, strTmp, RGB(255, 0, 0), hNormalFont); strAff = strAff.Mid(len); } else { break; } } } // 描述 rcContent.top += 17; rcContent.bottom += 17; rcContent.left = 15; rcContent.right = DEF_VUL_TIP_DETAIL_WIDTH; grap.DrawImage(pImg, rcContent.left, rcContent.top + 5); rcContent.left += 10; strTmp = BkString::Get(IDS_VULFIX_5172); _DrawText(memDC, rcContent, strTmp, RGB(0,0,0), hNormalFont); rcContent.left = rcContent.right; rcContent.right = DEF_VUL_TIP_DETAIL_WIDTH; CString strDes = m_pItemData->strDesc; if (strDes.GetLength() < 25) { _DrawText(memDC, rcContent, strDes, RGB(0, 0, 0), hNormalFont); } else { HFONT oldFont = memDC.SelectFont(hNormalFont);; int len = 25; strTmp = strDes.Mid(0, len); int nCount = 0; while(1) { CSize nSize; memDC.GetTextExtent(strTmp, -1, &nSize); if (rcContent.left + nSize.cx < DEF_VUL_TIP_DETAIL_WIDTH - 30) { if (len < strDes.GetLength()) { ++len; strTmp = strDes.Mid(0, len); } else { break; } } else break; } _DrawText(memDC, rcContent, strTmp, RGB(0, 0, 0), hNormalFont); strDes = strDes.Mid(len); while(1) { if (nCount >= 2) { break; } if (strDes.GetLength() > 0) { int len = strDes.GetLength(); rcContent.left = 25; rcContent.right = DEF_VUL_TIP_DETAIL_WIDTH; if (strDes.GetLength() > 30) len = 30; else break; strTmp = strDes.Mid(0, len); // 文字可能是混合的,从个数到计算长度来确定本行的个数。 while(1) { CSize nSize; memDC.GetTextExtent(strTmp, -1, &nSize); if (rcContent.left + nSize.cx < DEF_VUL_TIP_DETAIL_WIDTH - 30) { if (len < strDes.GetLength()) { ++len; strTmp = strDes.Mid(0, len); } else { break; } } else break; } if (len == strDes.GetLength()) break; rcContent.top += 17; rcContent.bottom += 17; _DrawText(memDC, rcContent, strTmp, RGB(0, 0, 0), hNormalFont); strDes = strDes.Mid(len); } else { break; } nCount ++; } memDC.SelectFont(oldFont); } CSize nSize; rcContent.top += 17; rcContent.bottom += 17; rcContent.left = 25; rcContent.right = DEF_VUL_TIP_DETAIL_WIDTH; memDC.GetTextExtent(strDes, -1, &nSize); if (rcContent.left + nSize.cx > DEF_VUL_TIP_DETAIL_WIDTH - 90) rcContent.right = DEF_VUL_TIP_DETAIL_WIDTH - 90; _DrawText(memDC, rcContent, strDes, RGB(0, 0, 0), hNormalFont); rcContent.left = rcContent.right; rcContent.right = DEF_VUL_TIP_DETAIL_WIDTH; _DrawText(memDC, rcContent, BkString::Get(IDS_VULFIX_5128), RGB(0x33, 0x62, 0x9A), BkFontPool::GetFont(FALSE, TRUE ,FALSE)); ::CopyRect(m_rcDetail, rcContent); // draw link HFONT hLinkFont = BkFontPool::GetFont(FALSE, TRUE, FALSE); CRect rcLink; COLORREF clrLink = RGB(0x33, 0x62, 0x9A); rcLink.SetRect(15, m_rcClient.Height() - 20, 300, m_rcClient.Height() - 5); _DrawText(memDC, rcLink, BkString::Get(IDS_VULFIX_5170), clrLink, hLinkFont); ::CopyRect(m_rcQuestion, rcLink); rcLink.left = 250; rcLink.right = DEF_VUL_TIP_DETAIL_WIDTH; _DrawText(memDC, rcLink, BkString::Get(IDS_VULFIX_5129), clrLink, hLinkFont); ::CopyRect(m_rcOfficial, rcLink); rcLink.left = 325; rcLink.right = DEF_VUL_TIP_DETAIL_WIDTH; _DrawText(memDC, rcLink, BkString::Get(IDS_VULFIX_5171), clrLink, hLinkFont); ::CopyRect(m_rcIgnoreVul, rcLink); ::EndPaint( m_hWnd, &ps ); }