获取对话框当前cfont_自绘对话框
下載本文示例代碼
下載示例源代碼
閑來(lái)無(wú)事,寫(xiě)了一個(gè)簡(jiǎn)單的對(duì)話框界面,希望給需要的朋友有所幫助。
界面如下:
界面很單調(diào),我只是想說(shuō)明一下如何實(shí)現(xiàn)界面的自繪。如果有需要,也可以繪制更復(fù)雜漂亮的界面。
程序的實(shí)現(xiàn)也不復(fù)雜,接下來(lái)就跟著我一步一步做。
首先,創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序。
接下來(lái),在CTestDlg類中添加兩個(gè)成員函數(shù):
// In CTestDlg.h
public:
void DrawView();
HBITMAP CreateGradientBMP(HDC hDC,COLORREF cl1,COLORREF cl2,int nWidth,int nHeight,int nDir,int nNumColors);函數(shù)的具體內(nèi)容如下:// In CtestDlg.cpp
void CTestDlg::DrawView()
{
CPaintDC dc(this);
CRect rect;
CString strText="TEST. HEllo WoRLD! 你好,VCKBASE!"; //文本內(nèi)容
GetClientRect(rect);
rect.right=27; //自繪區(qū)域?qū)挾?/p>
COLORREFm_clrSideBarStart; //自繪區(qū)域起始處顏色
COLORREFm_clrSideBarEnd; //自繪區(qū)域結(jié)束處顏色
m_clrSideBarStart=RGB(205,205,205); //灰色
m_clrSideBarEnd=RGB(100,0,0); //褐色
//創(chuàng)建圖及繪制區(qū)域
HBITMAPbmpBar = CreateGradientBMP(
dc.m_hDC, m_clrSideBarStart, m_clrSideBarEnd,
rect.Width(), rect.Height(),
0, 256);
if (bmpBar)
{
CDC memDC;
memDC.CreateCompatibleDC(&dc);
HBITMAP hOldBmp = (HBITMAP)::SelectObject(memDC.m_hDC, bmpBar);
dc.BitBlt(rect.left, rect.top,
rect.Width(), rect.Height(),
&memDC, 0, 0, SRCCOPY);
::SelectObject(memDC, hOldBmp);
::DeleteObject(bmpBar);
}
//繪制文本
CFontvertFont;
//字體
vertFont.CreateFont(16, 0, 900, 900, FW_BOLD,
0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH, "Arial");
CFont *pOldFont = dc.SelectObject(&vertFont);
COLORREF oldColor = dc.GetTextColor();
dc.SetTextColor(RGB(255, 255, 255)); //文本顏色
dc.SetBkMode(TRANSPARENT);
dc.TextOut(rect.left 2, rect.bottom-4, strText); //文本起始位置
dc.SetTextColor(oldColor);
dc.SelectObject(pOldFont);
vertFont.DeleteObject();
}//創(chuàng)建圖HBITMAP CTestDlg::CreateGradientBMP(HDC hDC, COLORREF cl1, COLORREF cl2, int nWidth, int nHeight, int nDir, int nNumColors)
{
if(nNumColors > 256)
nNumColors = 256;
COLORREF PalVal[256];
memset(PalVal, 0, sizeof(COLORREF)*256);
int nIndex;
BYTE peRed=0,peGreen=0,peBlue=0;
int r1=GetRValue(cl1);
int r2=GetRValue(cl2);
int g1=GetGValue(cl1);
int g2=GetGValue(cl2);
int b1=GetBValue(cl1);
int b2=GetBValue(cl2);
for (nIndex = 0; nIndex < nNumColors; nIndex )
{
peRed = (BYTE) (r1 MulDiv((r2-r1),nIndex,nNumColors-1));
peGreen = (BYTE) (g1 MulDiv((g2-g1),nIndex,nNumColors-1));
peBlue = (BYTE) (b1 MulDiv((b2-b1),nIndex,nNumColors-1));
PalVal[nIndex]=(peRed << 16) | (peGreen << 8) | (peBlue);
}
int x,y,w,h;
w=nWidth;
h=nHeight;
LPDWORDpGradBits;
BITMAPINFOGradBitInfo;
pGradBits=(DWORD*) malloc(w*h*sizeof(DWORD));
memset(&GradBitInfo,0,sizeof(BITMAPINFO));
GradBitInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
GradBitInfo.bmiHeader.biWidth=w;
GradBitInfo.bmiHeader.biHeight=h;
GradBitInfo.bmiHeader.biPlanes=1;
GradBitInfo.bmiHeader.biBitCount=32;
GradBitInfo.bmiHeader.biCompression=BI_RGB;
if(nDir==0)
{
for(y=0;y接下來(lái)在CtestDlg類的OnPaint()中添加代碼:void CTestDlg::OnPaint()
{
if (IsIconic())
{
//省略源碼……….
}
else
{
this->DrawView(); //此句為自添加
CDialog::OnPaint();
}
}
好了,現(xiàn)在編譯運(yùn)行即可。
祝各位編程快樂(lè)!
下載本文示例代碼
輸入您的搜索字詞
提交搜索表單
總結(jié)
以上是生活随笔為你收集整理的获取对话框当前cfont_自绘对话框的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 科创板对标股票是什么意思
- 下一篇: 征信逾期几次不能房贷