自绘列表框控件显示略缩图----再稍微改进点点。。

 原先贴在QQ空间,汗!!

http://user.qzone.qq.com/382164370/infocenter#!app=2&pos=1334911186


http://user.qzone.qq.com/382164370/infocenter#!app=2&pos=1334840523



每天思考一点无聊的问题,又是接上一篇日记的列表框自绘,在上一个自绘里面图片是用WINDOWS自己画上去的,这次彻底的全部的自己绘制(包括文字),这样做的好处是图片上不会覆盖一层阴影影响美观,改动是下面的红色显示的代码片段,有一个问题不知道为什么,就是下面这句


GetSubItemRect(nItem, nSubItem, LVIR_ICON, rect);


得到的矩形rect的宽度总是比图片宽度大42像素(列表框在ICO模式时),why?

 

 

                              

 

只是在前面的基础上修改这两个函数。。。
///
// OnNMCustomdraw
void CListImageCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);

//TRACE("CListImageCtrl::OnNMCustomdraw()");
// Take the default processing unless we set this to something else below.
*pResult = CDRF_DODEFAULT;

// First thing - check the draw stage. If it's the control's prepaint
// stage, then tell Windows we want messages for every item.

if (pLVCD->nmcd.dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (pLVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
// This is the notification message for an item.  We'll request
// notifications before each subitem's prepaint stage.
int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
int nSubItem = pLVCD->iSubItem;
CDC* pDC = CDC::FromHandle(pLVCD->nmcd.hdc);
CRect rect;
GetSubItemRect(nItem, nSubItem, LVIR_ICON, rect);

XLISTCTRLDATA *pXLCD = (XLISTCTRLDATA *) pLVCD->nmcd.lItemlParam;
ASSERT(pXLCD);

COLORREF crText  = m_crWindowText;
COLORREF crBkgnd = m_crWindow;

if (pXLCD)
{
crText  = pXLCD[nSubItem].crText;
crBkgnd = pXLCD[nSubItem].crBackground;

if (!pXLCD[0].bEnabled)
crText = m_crGrayText;
}

// store the colors back in the NMLVCUSTOMDRAW struct
pLVCD->clrText = crText;
pLVCD->clrTextBk = crBkgnd;


//draw image,
rect.left += 19;
rect.right -= 19;
DrawImage(nItem, nSubItem, pDC, crText, crBkgnd, rect, pXLCD);

//draw checkbox
if (pXLCD && (pXLCD[nSubItem].nCheckedState != -1))
DrawCheckbox(nItem, nSubItem, pDC, crText, crBkgnd, rect,pXLCD);
//draw text
GetSubItemRect(nItem, nSubItem, LVIR_LABEL, rect);

DrawText(nItem, nSubItem, pDC, crText, crBkgnd, rect, pXLCD);

*pResult = CDRF_SKIPDEFAULT;   //we have done all the paint

}
 else if (pLVCD->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
 {

 *pResult = CDRF_DODEFAULT;
 }

}

///
// DrawImage
int CListImageCtrl::DrawImage(int nItem,
 int nSubItem,
 CDC* pDC,
 COLORREF crText,
 COLORREF crBkgnd,
 CRect rect,
 XLISTCTRLDATA *pXLCD)
{
if (rect.IsRectEmpty())
{
return 0;
}

GetDrawColors(nItem, nSubItem, crText, crBkgnd);

CBrush bkBrush(crBkgnd);
CRgn rgn;
rgn.CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom);
pDC->FrameRgn(&rgn,&bkBrush,2,2);     //draw my border

int nGap = 0;
rect.left += 0;  

CImageList* pImageList = GetImageList(LVSIL_SMALL);
if (pImageList)
{
SIZE sizeImage;
sizeImage.cx = sizeImage.cy = 0;
IMAGEINFO info;

int nImage = -1;
if (pXLCD)
nImage = pXLCD[nSubItem].nImage;

if (nImage == -1)
return 0;

if (pImageList->GetImageInfo(nImage, &info))
{
sizeImage.cx = info.rcImage.right - info.rcImage.left;
sizeImage.cy = info.rcImage.bottom - info.rcImage.top;
}

if (nImage >= 0)
{
if (rect.Width() > 0)
{
POINT point;

point.y = rect.CenterPoint().y - (sizeImage.cy >> 1);
point.x = rect.CenterPoint().x - (sizeImage.cx >> 1);

SIZE size;
size.cx = rect.Width() < sizeImage.cx ? rect.Width() : sizeImage.cx;
size.cy = rect.Height() < sizeImage.cy ? rect.Height() : sizeImage.cy;

// save image list background color
COLORREF rgb = pImageList->GetBkColor();

// set image list background color
pImageList->SetBkColor(crBkgnd);
pImageList->DrawIndirect(pDC, nImage, point, size, CPoint(0, 0));
pImageList->SetBkColor(rgb);

nGap = sizeImage.cx + 5;  
}
}
}

return nGap;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传圣火~~~递友情~~~~NAONAO是博客火炬手~~~

有幸被美美点到&#xff0c;接到奥运圣火了&#xff01;把新浪火炬传递到吾等10人手中&#xff0c;至此吾等10人就成为新浪博客第五十二棒奥运火炬手了。按规则&#xff0c;NAONAO需点10名新火炬手&#xff0c;请点到名的亲们继续传递下去&#xff01;拜托了~~ 传圣火&#xff…

UART 异步串行通信发送模块设计与实现

UART 异步串行通信发送模块设计与实现 串口发送模块接口设计 注意:在每一次设计端口时,我们都要求可以随时控制该模块开始和结束,因此在设计每一个模块时,务必要加模块的使能端口(EN)和模块结束端口(DONE)。这也是握手机制的本质所在。

64位Ubuntu kylin 16.04下使用DNW下载uboot到tiny4412的EMMC

工具下载&#xff1a;http://download.csdn.net/detail/zn2857/9637426 1.连接开发板和和pc之间的usb转串口线&#xff0c;usb线&#xff0c;在pc端打开vim&#xff0c;启动minicom 2.使用sd卡启动开发板&#xff0c;进入uboot 3.输入dnw&#xff0c;会有如下提示 TINY4412 #…

世界奥运建筑文学第一书  北京奥运长篇纪实第一人

曾哲 2008年7月&#xff0c;北京作家协会和同心出版社联合召开《觉建筑》北京首发式。由同心出版社出版的世界奥运建筑文学第一书《觉建筑》出版三个月以来已经印刷两次&#xff0c;发行量达19000册&#xff0c;值此北京奥运即将召开之际&#xff0c;此书是对北京奥运的最佳献礼…

test libvirt

/**************************************************************** *filename:myvm.c *author:hemmingway time:2012年05月25日 星期五 17时46分39秒 *compile with:gcc -g -Wall myvm.c -o myvm -lvirt ****************************************************************…

身体对腐朽灵魂的一次震撼:向京的雕塑与观众的行为

在上文所介绍的“个案——艺术批评中的艺术家”展览中&#xff0c;在一个小房间似的展厅里展出了女雕塑家向京的作品《你的身体》。一个女孩随意地仰躺在白色的床上&#xff0c;两腿叉开&#xff0c;双肢上扬&#xff0c;手里拿着一只没来及关闭的手机&#xff0c;像是刚刚挂了…

双口RAM

双口RAM IP配置 激励文件 `timescale 1ns / 1ps `define clk_period 20 module dpram_tb( );reg clock;reg [7:0]data;reg [7:0]rdaddress;reg [7:0]wraddress;reg wren;wire [7:0]q;integer i;dist_mem_gen_0 dist_mem_gen_0 (.a(data), // input wire [7 : 0] a.d…

64位Ubuntu kylin 16.04搭建tftp服务器

http://www.linuxidc.com/Linux/2016-07/133255.htm1. 安装$ apt install tftp-hpa tftpd-hpa2. 建立目录$ mkdir /tftpboot # 这是建立tftp传输目录。$ sudo chmod 0777 /tftpboot$ sudo touch test.txt # test.txt文件最好输入内容以便区分3. 配置# vi /etc/default/tftpd-hp…

游牧大地的诗意:看龙力游的草原油画

暮咏蒙古秘史 家乡的亲戚来电话说&#xff0c;今年呼伦贝尔的草特别的绿&#xff0c;羊肉也特别地鲜美。8月1日还是鄂温克自治旗成立50年大庆。可惜我没有时间回去&#xff0c;郁闷之余&#xff0c;贴几张我喜欢的画家龙力游的油画&#xff0c;略表思乡之情。 龙力游是湖南人&a…

看奥运之一:实力是最重要的

8月9日&#xff0c;陈燮霞在北京奥运会举重48公斤级决赛中&#xff0c;夺得金牌&#xff0c;这是中国代表团在本届奥运会上获得的首枚金牌。 记者&#xff1a;陈燮霞夺得中国首金&#xff0c;她终于不负众望。 兴安&#xff1a;对&#xff0c;其实在比赛之前&#xff0c;这枚金…

状态机实现按键消抖

状态机实现按键消抖 module key_filter(Clk, //50M时钟输入Rst_n, //模块复位key_in, //按键输入key_flag, //按键标志信号key_state //按键状态信号);input Clk;input Rst_n;input key_in;output reg key_flag;output reg key_state;localparamIDEL = 4b0001,FILTE…

看奥运之二:现场看男子体操团体决赛

昨天和女儿去国家体育馆看了北京奥运会男子体操团体决赛。第一次现场看体操比赛&#xff0c;第一次现场看世界大赛&#xff0c;场面可想而知&#xff0c;非常火暴。这是中国男子体操队员获得团体比赛冠军的一刹那。队员都非常激动&#xff0c;有人甚至喜极而泣。这也是2004年雅…

64位Ubuntu kylin 16.04搭建nfs网络文件系统

一 安装配置nfs服务 1.新建目录 mkdir /home/ning/rootfs 2.安装nfs服务 ningENVY:/$ sudo apt install nfs-kernel-server 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 将会同时安装下列软件&#xff1a; keyutil…

看奥运之四:“鸟巢”旁边的洋人求票者

这个德国人在一张纸板上写着“我需要票”四个中国字&#xff0c;四处探寻。 这个家伙显然是一个“黄牛党”&#xff0c;手里拿着一叠票&#xff0c;在吆喝。旁边的小伙子是专职翻译呢&#xff0c;还是想买票的呢。 买洋人的票更要检验一下真假。 “100块钱卖不卖&#xff1f;”…

搭建串口收发与存储双口RAM简易应用系统

搭建串口收发与存储双口RAM简易应用系统 为了实现通过串口发送数据到 FPGA 中, FPGA 接收到数据后将数据存储在双口 ram 的 一段连续空间中,当需要时,按下按键 S0,则 FPGA 将 RAM 中存储的数据通过串口发送出 去。先进行功能划分:串口接收模块、按键消抖模块、 RAM 模块、…

PIC32单片机harmony开发环境搭建并新建harmony工程

软件&#xff1a;maplab x 编译器&#xff1a;xc32 开发框架&#xff1a;harmony 建议安装时选择英文&#xff0c;此处省略上面三个软件安装过程。 安装完毕后&#xff0c;tools -> plugins -> available plugin中选择maplab harmony configurator下载安装。 (注&am…

看奥运之五:关于“鸟巢”、“水立方”的数据和内涵

将国家体育场设计成“鸟巢”的形状&#xff0c;是由瑞士的赫尔佐格与德梅隆建筑设计事务所提出的。中方的施工图设计单位是中国建筑设计院。总建筑师是李兴纲&#xff0c;纲结构设计师是范重。2006年&#xff0c;“鸟巢”被英国著名杂志《建筑新闻》列入令人惊异的世界十大建筑…

是谁压垮了刘翔?

是谁压垮了刘翔&#xff1f; 师傅。 跑道。 广告。 这张照片是在第10届全运会上拍摄的&#xff0c;是刘翔冲刺的一刹那。运动员身上所穿服装的标志&#xff0c;是日本货―美津浓&#xff08;全运会服装的唯一指定商&#xff09;。刘翔却用胶布把商标贴的死死的。 国家体育总…

PWM 发生器模块设计

PWM 发生器模块设计 PWM 产生原理可得出以下两个主要电路: 定时器/计数器电路以及输出比较电路。 最终输出 PWM 波的频率计算公式为:𝑓𝑝𝑤𝑚 =𝑓𝑐𝑙𝑘 / (𝑐𝑜𝑢𝑛𝑡𝑒𝑟_𝑎𝑟𝑟 + 1) 因此, 当输出频率确定时,可计算得到预重装值,…

在线IDE

http://www.sourcelair.com/ 支持多种语言