下载本文示例代码

下载示例源代码

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

界面如下:

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

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

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

接下来,在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接下来在CtestDlg类的OnPaint()中添加代码:void CTestDlg::OnPaint()

{

if (IsIconic())

{

//省略源码……….

}

else

{

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

CDialog::OnPaint();

}

}

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

祝各位编程快乐!

下载本文示例代码

输入您的搜索字词

提交搜索表单

获取对话框当前cfont_自绘对话框相关推荐

  1. 【MFC】自绘对话框动画效果的状态栏

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 在许多多媒体软件中,状 ...

  2. 获取弹出式窗口(对话框)句柄

    原文: 获取弹出式窗口(对话框)句柄 http://www.vbgood.com/thread-103057-1-1.html 昨天遇到了这个问题:碰巧今天在MSDN上看到了这方面的内容,记录下. 假 ...

  3. MFC实现打开、保存文件对话框和浏览文件夹对话框,把代码直接拷贝到要响应的按钮函数下面就行了

    MFC实现打开.保存文件对话框和浏览文件夹对话框,把代码直接拷贝到要响应的按钮函数下面就行了 一.打开.保存对话框 文件对话框属于通用对话框范畴(另外还有颜色,查找,查找替换,字体,打印等对话框). ...

  4. Qt的对话框与窗口--标准的对话框

    Qt的对话框与窗口--标准的对话框 标准的对话框 QFileDialog对话框 1.选择打开一个文件 2.选择打开多个文件 3.选择已有目录 4.选择保存文件名 QColorDialog对话框 QFo ...

  5. android 单选框 icon,Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解...

    标签: 对话框就是一个AlertDialog,但是一个简单的AlertDialog,我们却可以将它玩出许多花样来,下面我们就来一起总结一下AlertDialog的用法.看看各位童鞋在平时的工作中否都用 ...

  6. android 之Dialog的多种Dialog对话框(以及反射在自定义对话框的运用)

    实际效果: 实例代码: 一个"启动初始Activity.xml" 一个弹出的Activity 业务逻辑代码: package com.hsj.example.alertdialog ...

  7. VS2010-MFC(对话框:一般属性页对话框的创建及显示)

    转自:http://www.jizhuomi.com/software/169.html 属性页对话框包括向导对话框和一般属性页对话框两类,上一节演示了如何创建并显示向导对话框,本节将继续介绍一般属性 ...

  8. MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)

    属性页对话框包括向导对话框和一般属性页对话框两类,上一节讲了如何创建并显示向导对话框,本节将继续介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的.将上 ...

  9. swing中模态对话框(setModal(true))和显示对话框(setVisible(true))的编写顺序

    今天给大家分享一个鄙人在编程中总结出的一个易错点和最容易让人感到困惑的一个知识点: 当你要从一个窗体跳转到另一个窗体,你把跳转目标的窗体设成模态对话框,设计成模态对话框就是禁止父窗体与子窗体之间操作, ...

最新文章

  1. HttpContext.Current:异步模式下的疑似陷阱之源
  2. 从零写一个编译器(十二):代码生成之生成逻辑
  3. yum 安装mysql 启动_linux(centos6.9)下使用yum安装mysql,及启动MySQL等
  4. python 元类 type_Python 使用元类type创建类对象常见应用详解
  5. 浅析PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
  6. vim deepin linux,Vim - deepin Wiki
  7. 浅析Windows计算机中丢失SETUPAPI.dll的问题
  8. 【渝粤教育】广东开放大学 服务标准化 形成性考核 (41)
  9. centos7查看设置IP地址
  10. linux ubuntu apache php 网站 'page not found'
  11. Javascript-history.go()和history.back()的用法和区别
  12. 【TA-霜狼_may-《百人计划》】图形3.2 混合模式及剔除
  13. ubuntu编译tensorflow 支持AVX,AVX2等指令集
  14. bat脚本打开cmd执行命令
  15. 方正飞鸿ES2007SOA工作流开发平台视频演示材料目录
  16. 高德地图标识大全_连地震都查得一清二楚!高德地图新功能体验
  17. 土法炼钢:服务器定时汇报IP地址给我
  18. 天道酬勤,记春招之路(完美世界,360,腾讯IEG,网易雷火)
  19. iPhone苹果手机支付宝App Store消费红包怎么使用?
  20. 什么是框架?框架要解决的问题?

热门文章

  1. wxWidgets:wxFileCtrl类用法
  2. wxWidgets:编写非英语应用程序
  3. boost::detail::yield相关的测试程序
  4. boost::hana::make_map用法的测试程序
  5. boost::geometry::detail::overlay::get_turn_info用法的测试程序
  6. GDCM:读取gdcm::Curve的测试程序
  7. GDCM:西门子CSA转DICOM文件的测试程序
  8. VTK:可视化算法之VelocityProfile
  9. VTK:PolyData之DetermineArrayDataTypes
  10. OpenCV点分类器points classifier的实例(附完整代码)