// Output Text VOID OnDraw(HWND hWnd, HDC hdc) { //使用HDC,PEN, HBRUSH...必须DELETE COLORREF ordCol = SetTextColor(hdc, RGB(255, 0, 0)); // sets the text color for the specified device context to the specified color std::wstring strShow(_T("Kobe!..........................................!")); RECT rcText; GetClientRect(hWnd, &rcText); // retrieves the coordinates of a window's client area HBRUSH hBrush = CreateSolidBrush(RGB(0, 0, 0)); // creates a logical brush that has the specified solid color FillRect(hdc, &rcText, hBrush); // Don't forget the object you had created DeleteObject(hBrush); int iOldMode = SetBkMode(hdc, TRANSPARENT); // sets the background mix mode of the specified device context .TRANSPAREN and OPAQUE TextOut(hdc, 10, 10, strShow.c_str(), (int)strShow.length()); HGDIOBJ hOldFont = SelectObject(hdc, GetFont()); // Create a new font in the GetFont() function SetTextColor(hdc, RGB(0, 0, 255)); // also can draw text on button DrawText(hdc, strShow.c_str(), (int)strShow.length(), &rcText, DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); HGDIOBJ hFont = SelectObject(hdc, hOldFont); // Don't forget the object you had created DeleteObject(hFont); // Delete the new font TEXTMETRIC tmText; GetTextMetrics(hdc, &tmText); rcText.left = 10; rcText.top = 30; rcText.right = 300; rcText.bottom = 50; DrawText(hdc, strShow.c_str(), (int)strShow.length(), &rcText, DT_LEFT|DT_SINGLELINE|DT_END_ELLIPSIS); rcText.left = 10; rcText.top = rcText.top + tmText.tmHeight; rcText.right = 300; rcText.bottom = 70; DrawText(hdc, strShow.c_str(), (int)strShow.length(), &rcText, DT_LEFT|DT_SINGLELINE|DT_END_ELLIPSIS); // Don't forget select the old object SetBkMode(hdc, iOldMode); // please sets the mode or color back. SetTextColor(hdc, ordCol); } // Create a new font // HFONT CreateFont( // int nHeight, // height of font // int nWidth, // average character width // int nEscapement, // angle of escapement // int nOrientation, // base-line orientation angle // int fnWeight, // font weight // DWORD fdwItalic, // italic attribute option // DWORD fdwUnderline, // underline attribute option // DWORD fdwStrikeOut, // strikeout attribute option // DWORD fdwCharSet, // character set identifier // DWORD fdwOutputPrecision, // output precision // DWORD fdwClipPrecision, // clipping precision // DWORD fdwQuality, // output quality // DWORD fdwPitchAndFamily, // pitch and family // LPCTSTR lpszFace // typeface name // ); // How to modify system font HFONT GetFont(VOID) { LOGFONT lFont; // struct of font, for Create font GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lFont); lFont.lfItalic = TRUE; lFont.lfUnderline = TRUE; // Modify the attribute of the system font here... return CreateFont(lFont.lfHeight, lFont.lfWidth, lFont.lfEscapement, lFont.lfOrientation, lFont.lfWeight, lFont.lfItalic, lFont.lfUnderline, lFont.lfStrikeOut, lFont.lfCharSet, lFont.lfOutPrecision, lFont.lfClipPrecision, lFont.lfQuality, lFont.lfPitchAndFamily, lFont.lfFaceName); } // using a pen draw a line // HPEN CreatePen( // int fnPenStyle, // pen style // int nWidth, // pen width // COLORREF crColor // pen color // ); // HGDIOBJ SelectObject( // HDC hdc, // handle to DC // HGDIOBJ hgdiobj // handle to object // ); POINT DrawLine(HDC hdc) { POINT ptPre; POINT ptLeftTop = {100, 100}; POINT ptRightBottom = {200, 200}; HPEN hpen = CreatePen(PS_SOLID, 10, RGB(255, 0, 0)); HGDIOBJ hOldpen = SelectObject(hdc, hpen); // ptPre : the coordinate of previous point MoveToEx(hdc, ptLeftTop.x, ptLeftTop.y, &ptPre); LineTo(hdc, ptRightBottom.x, ptRightBottom.y); // Don't forget select the old object SelectObject(hdc, hOldpen); // Don't forget the object you had created DeleteObject(hpen); return ptPre; } 这次的有点杂乱...