ClistCtrl 单击某行 图片变更

来源:互联网 发布:汉密尔顿学院 知乎 编辑:程序博客网 时间:2024/06/05 17:49

1. 首先需要在 presubcalsswindow() 中 添加图片列表 Cimagelist  设置 图片的大小(目的将 行距 加大)

2.setImagelist(&CimageList,LVSIL_STATE   );

3. CRect rect;
    GetWindowRect(&rect);
    InsertColumn(0,TEXT("PID"),LVCFMT_LEFT);//添加 列
    SetColumnWidth(0,rect.right - rect.left-4);// 设置 列宽

    SetExtendedStyle( LVS_EX_FULLROWSELECT
        |LVS_OWNERDRAWFIXED
        |LVS_EX_SUBITEMIMAGES
        |LBS_OWNERDRAWVARIABLE);//设置  样式

 

4 重载DrawItem

(GetItemState(lpDrawItemStruct->itemID,LVIS_SELECTED)) 重绘 时 检测 表项是否被选中 同是绘制响应的图片

 

参考 http://hi.baidu.com/asmcvc/blog/item/ac6d1ec617c88c169d163dd3.html

 

同时 presubclasswindow 与 precreatewindow 的区别  参考http://blog.csdn.net/xjh_Love_paopao/archive/2008/07/17/2666494.aspx 及

 

 

也在调用函数SetWindowLong进行窗口subclass前调用了PreSubclassWindow.

*******************************************************************************************

通常情况下窗口是由用户创建的
CWnd::Create(..)
●在此流程中,MFC提供一个机会"PreCreateWindow()供用户在创建前作点手脚

而对于对话框等,窗口是通过subclass方式交给用户的
系统读入对话框模板,建立其中各个子窗口

然后将各子窗口的 消息处理函数替换成 对应的C++对象 的消息处理函数 (Subclass:子类化,或"接管") ,然后,这个子窗口就会按类中定义的方式来动作了。

在此过程中,调用的是CWnd:SubclassWindow( HWND hWnd );
●在此流程中,MFC提供一个机会"PreSubclassWindow" 供用户在关联前作点手脚

具体来说,如果你定义一个窗口(如CButton派生类CMyButton),然后使用对话框数据交换将一个按钮与自己的派生类对象关联,这时候,一些"建立前"的处理就应该写在"PreSubclassWindow"中。

如果你用的不是"对话框数据关联",而是在OnInitDialg中自己创建m_mybtn.Create(...)
这时候,一些"建立前"的处理就应该写在
"PreCreateWindow"中。

这里“建立前”的处理包括像那些处理,跟PreCreateWindows()做的一些窗口初始化的工作有什么不同?

PreCreateWindows函数中没有窗口可以用——还没有创建
PreSubclassWindow函数中可以对窗口进行操作。

原创粉丝点击