自绘对话框

2016-01-29 11:55 3 1 收藏

自绘对话框,自绘对话框

【 tulaoshi.com - C语言心得技巧 】

自绘对话框
作者:Alon

下载示例源代码

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

首先,创建一个基于对话框的应用程序。
接下来,在CTestDlg类中添加两个成员函数:

// In CTestDlg.hpublic:void DrawView();HBITMAP CreateGradientBMP(HDC hDC,COLORREF cl1,COLORREF cl2,int nWidth,int nHeight,int nDir,int nNumColors);
函数的具体内容如下:
// In CtestDlg.cppvoid 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,&Grad
                        

来源:http://www.tulaoshi.com/n/20160129/1483865.html

延伸阅读
手机QQ对话框没有视频对话选项   QQ对话框没有视频对话选项解决办法: 1、手机不支持视频聊天 2、对方手机或电脑端不支持视频聊天功能。 3、对方或自身手机是WP系统 4、客户端版本过低不支持视频通话 总结:QQ对话框没有视频对话选项一般都是上述几种情况引起的,如果除了上述集中外还是不能的话可以尝试...
标签: 办公软件
如果需要在Word 2000/2002中反复进行某项工作,就可以利用宏来自动完成这项工作。宏是一系列组合在一起的 Word 命令和指令,它们形成了一个命令,以实现任务执行的自动化,也就是说宏就是一条自定义的命令。 我们可以创建并执行宏,以替代人工进行的一系列费时而单调的重复性 Word 操作,自动完成任务。我们可以用宏录制器和“Visual Basi...
标签: 电脑入门
最新版的qq2012对话框装扮现在和主面板皮肤是统一的了,在主面板右上角,更改外观,就是那个小衣服的标志即可。 方法一: 1.点qq面板最小化左边的衣服即更改外观 2.选择自已喜欢的皮肤,如果要透明的话点窗口右下方倒数第四个按钮,将滚动条拖动到最上方就将皮肤全透明啦。(如果想使用自已从网上下载的皮肤的话就可以点自定义,后面的步...
VisualBasic提供了过时的FileCopy语句.问题是使用该函数时并不显示文件复制对话框,也就是说,当拷贝一个大文件时,用户看不到Windows的标准 文件复制对话框,无法从进度条上判断当前复制的进度.那么,如何做到这一点呢?请看下面: PublicTypeSHFILEOPSTRUCT hWndAsLong wFuncAsLong pFromAsString pToAsString fFl...
标签: 办公软件
在Excel中,执行“工具→选项”命令,打开“选项”对话框可进一步对Excel进行个性化设置。但是,如果设置不当,有时会带来不必要的麻烦。下面是笔者同一位Excel初学者的对话,我们整理出来,希望对大家有所帮助。 问:每次启动Excel时,窗口右侧都被一个工具条占去了一大部分(如图1),影响编辑表格,如何不让这个工具条自动启动呢? 答...

经验教程

827

收藏

54
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部