王朝网络
分享
 
 
 

自绘对话框

王朝vc·作者佚名  2006-01-17
宽屏版  字体: |||超大  

自绘对话框

作者:Alon

下载示例源代码

闲来无事,写了一个简单的对话框界面,希望给需要的朋友有所帮助。

界面如下:

界面很单调,我只是想说明一下如何实现界面的自绘。如果有需要,也可以绘制更复杂漂亮的界面。

程序的实现也不复杂,接下来就跟着我一步一步做。

首先,创建一个基于对话框的应用程序。

接下来,在CTestDlg类中添加两个成员函数:

// In CTestDlg.h

public:

void DrawView();

HBITMAP CreateGradientBMP(HDC hDC,COLORREF cl1,COLORREF cl2,int nWidth,int nHeight,int nDir,int nNumColors);

函数的具体内容如下:// In CtestDlg.cpp

void CTestDlg::DrawView()

{

CPaintDC dc(this);

CRect rect;

CString strText="TEST. HEllo WoRLD! 你好,VCKBASE!"; //文本内容

GetClientRect(rect);

rect.right=27; //自绘区域宽度

COLORREFm_clrSideBarStart; //自绘区域起始处颜色

COLORREFm_clrSideBarEnd; //自绘区域结束处颜色

m_clrSideBarStart=RGB(205,205,205); //灰色

m_clrSideBarEnd=RGB(100,0,0); //褐色

//创建图及绘制区域

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();

}

//创建图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<h;y++)

{

for(x=0;x<w;x++)

{

*(pGradBits+(y*w)+x)=PalVal[MulDiv(nNumColors,y,h)];

}

}

}

else if(nDir==1)

{

for(y=0;y<h;y++)

{

int l,r;

l=MulDiv((nNumColors/2),y,h);

r=l+(nNumColors/2)-1;

for(x=0;x<w;x++)

{

*(pGradBits+(y*w)+x)=PalVal[l+MulDiv((r-l),x,w)];

}

}

}

else if(nDir==2)

{

for(x=0;x<w;x++)

{

for(y=0;y<h;y++)

{

*(pGradBits+(y*w)+x)=PalVal[MulDiv(nNumColors,x,w)];

}

}

}

else if(nDir==3)

{

for(y=0;y<h;y++)

{

int l,r;

r=MulDiv((nNumColors/2),y,h);

l=r+(nNumColors/2)-1;

for(x=0;x<w;x++)

{

*(pGradBits+(y*w)+x)=PalVal[l+MulDiv((r-l),x,w)];

}

}

}

HBITMAP hBmp = CreateDIBitmap(hDC,&GradBitInfo.bmiHeader,CBM_INIT,

pGradBits,&GradBitInfo,DIB_RGB_COLORS);

free(pGradBits);

return hBmp;

}

接下来在CtestDlg类的OnPaint()中添加代码:void CTestDlg::OnPaint()

{

if (IsIconic())

{

//省略源码……….

}

else

{

this-DrawView(); //此句为自添加

CDialog::OnPaint();

}

}

好了,现在编译运行即可。

祝各位编程快乐!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有