维护到一个古老的gm工具的时候 需要这个功能 在网上找到一份很好用的代码 贴到这里 再次感谢那位同僚

#pragma once
//#include "OrangeMessage.h" // COrangeEdit class COrangeEdit : public CEdit
{
DECLARE_DYNAMIC(COrangeEdit) public:
COrangeEdit();
virtual ~COrangeEdit(); protected:
DECLARE_MESSAGE_MAP()
virtual void PreSubclassWindow();
public:
afx_msg void OnKillFocus(CWnd* pNewWnd);
};
// OrangeEdit.cpp : 实现文件
// #include "stdafx.h"
//#include "ListDemo.h"
#include "OrangeEdit.h"
#include "WindowManager.h" // COrangeEdit IMPLEMENT_DYNAMIC(COrangeEdit, CEdit) COrangeEdit::COrangeEdit()
{ } COrangeEdit::~COrangeEdit()
{
} BEGIN_MESSAGE_MAP(COrangeEdit, CEdit)
ON_WM_KILLFOCUS()
END_MESSAGE_MAP() // COrangeEdit 消息处理程序 void COrangeEdit::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
CEdit::PreSubclassWindow();
} void COrangeEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd); // TODO: 在此处添加消息处理程序代码
CWnd* pParent = this->GetParent(); ::SendMessage(pParent->GetSafeHwnd(),ORANGE_LVN_ENDEDIT,,);
}
#pragma once
#include "orangeedit.h"
//#include "OrangeMessage.h"
// COrangeListCtrl class COrangeListCtrl : public CListCtrl
{
DECLARE_DYNAMIC(COrangeListCtrl) public:
COrangeListCtrl();
virtual ~COrangeListCtrl(); protected:
DECLARE_MESSAGE_MAP()
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
protected:
virtual void PreSubclassWindow();
afx_msg LRESULT OnEndEdit(WPARAM wParam,LPARAM lParam);
void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
private:
int m_nItem;//主项
int m_nSubItem;//子项
COrangeEdit m_Edit_ctlItem; CFont m_FontItem;
int m_nRowHeight;
public:
void SetRowHeigt(int nHeight);
};
// OrangeListCtrl.cpp : 实现文件
// #include "stdafx.h"
#include "WindowManager.h"
#include "OrangeListCtrl.h" // COrangeListCtrl IMPLEMENT_DYNAMIC(COrangeListCtrl, CListCtrl) COrangeListCtrl::COrangeListCtrl()
{
m_nRowHeight=;
} COrangeListCtrl::~COrangeListCtrl()
{
} BEGIN_MESSAGE_MAP(COrangeListCtrl, CListCtrl)
ON_WM_LBUTTONDOWN()
ON_MESSAGE(ORANGE_LVN_ENDEDIT, OnEndEdit)
ON_WM_MEASUREITEM()
ON_WM_MEASUREITEM_REFLECT()
END_MESSAGE_MAP() // COrangeListCtrl 消息处理程序 void COrangeListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{ // TODO: 添加您的代码以绘制指定项
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); LVITEM lvi = {};
lvi.mask = LVIF_STATE;
lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED ;
lvi.iItem = lpDrawItemStruct->itemID;
BOOL bGet = GetItem(&lvi); BOOL bHighlight =((lvi.state & LVIS_DROPHILITED)||((lvi.state & LVIS_SELECTED) && ((GetFocus() == this)|| (GetStyle() & LVS_SHOWSELALWAYS)))); CRect rcBack = lpDrawItemStruct->rcItem; if( bHighlight ) //高亮显示
{
pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
pDC->FillRect(rcBack, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
}
else
{ pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
pDC->FillRect(rcBack, &CBrush(::GetSysColor(COLOR_WINDOW))); }
//绘制文本
CString strText=L"";
CRect rcItem;
if (lpDrawItemStruct->itemAction & ODA_DRAWENTIRE)
{
for (int i = ; i < GetHeaderCtrl()-> GetItemCount();i++)
{
if ( !GetSubItemRect(lpDrawItemStruct->itemID, i, LVIR_LABEL, rcItem ))
continue;
strText = GetItemText( lpDrawItemStruct->itemID, i ); pDC->DrawText(strText,strText.GetLength(), &rcItem, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_BOTTOM);
}
} } void COrangeListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CListCtrl::OnLButtonDown(nFlags, point);
CRect rcCtrl;
LVHITTESTINFO lvhti;
lvhti.pt = point;
m_nItem =SubItemHitTest(&lvhti);
if (m_nItem == -) return;
m_nSubItem = lvhti.iSubItem;
GetSubItemRect(m_nItem,m_nSubItem,LVIR_LABEL,rcCtrl);
if (m_Edit_ctlItem.m_hWnd == NULL)
{
m_Edit_ctlItem.Create(ES_AUTOHSCROLL|WS_CHILD|ES_LEFT|ES_WANTRETURN|WS_BORDER,CRect(,,,),this,);
m_Edit_ctlItem.ShowWindow(SW_HIDE); m_FontItem.CreateStockObject(DEFAULT_GUI_FONT);
m_Edit_ctlItem.SetFont(&m_FontItem);
m_FontItem.DeleteObject(); }
CString strItem=GetItemText(m_nItem,m_nSubItem);
m_Edit_ctlItem.MoveWindow(&rcCtrl);
m_Edit_ctlItem.ShowWindow(SW_SHOW);
m_Edit_ctlItem.SetWindowText(strItem);
m_Edit_ctlItem.SetFocus();
m_Edit_ctlItem.SetSel(-);
}
void COrangeListCtrl::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
ModifyStyle(,LVS_OWNERDRAWFIXED);
CListCtrl::PreSubclassWindow(); } LRESULT COrangeListCtrl::OnEndEdit(WPARAM wParam,LPARAM lParam) { CString strText;
m_Edit_ctlItem.GetWindowText(strText);
SetItemText(m_nItem,m_nSubItem,strText);
m_Edit_ctlItem.ShowWindow(SW_HIDE); return ; } void COrangeListCtrl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
if (m_nRowHeight>)
{
lpMeasureItemStruct->itemHeight = m_nRowHeight;
}
}
void COrangeListCtrl::SetRowHeigt(int nHeight)
{
m_nRowHeight = nHeight; CRect rcWin;
GetWindowRect(&rcWin);
WINDOWPOS wp;
wp.hwnd = m_hWnd;
wp.cx = rcWin.Width();
wp.cy = rcWin.Height();
wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
SendMessage(WM_WINDOWPOSCHANGED, , (LPARAM)&wp);
} void COrangeListCtrl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}

mfc 可编辑 list control的更多相关文章

  1. 「Windows MFC 」「Edit Control」 控件

    「Windows MFC 」「Edit Control」 控件

  2. MFC中编辑框Edit Control添加“变量”后

  3. MFC:编辑区 Edit 的属性及使用

    Edit Control 编辑控件是 MFC 中使用较多的控件之一 1. Edit 的属性 Acccept Files -> True 控件接受拖放文件 Multiline -> True ...

  4. MFC 可编辑文本框,MFC控件关联变量总结

    Edit Control控件,默认状态下,按回车会调用OnOK()关闭窗体.解决此bug可以,类视图中单击CMFCApplication3Dlg,下方重写OnOK(),注释掉其中的代码即可. Edit ...

  5. mfc控件——list control的使用

    [前话] 编译原理的第一个实验——词法分析器验收时,老师要求最后的结果用GUI的形式表现出来.想想确实,黑白的控制台应用程序界面在用户操作时的确不如GUI 友好.GUI界面也算是大势所趋.我现在掌握三 ...

  6. MFC可编辑ListBox控件CEditableListBox

    左击选中单元格,右击进入编辑状态. MFC自定义控件的添加方法C#自定义控件编译后就自动出现在工具箱里.MFC的自定义控件需要先拖个基类到对话框上,然后添加一个控件变量.再修改源代码中的控件名为扩展控 ...

  7. MFC可编辑的ListCtrl

    近期由于项目的要求,需要一个可以编辑的列表控件,由于MFC提供的列表控件只支持第一行可编辑,无法满足项目需求,故只能自己动手重写一个列表控件.重写列表控件的思想为:当点击列表的某行某列时,在此处创建一 ...

  8. MFC控件Slider Control的使用

    写MFC界面程序时,今天恰好用到Slider控件,做一个小小的记录. 步骤 1.在工具栏中添加Slider Control控件: 2.在控件上右键->添加变量(Add Variable...), ...

  9. MFC图形编辑界面工具

    一.背景 喔,五天的实训终于结束了,学校安排的这次实训课名称叫高级程序设计实训,但在我看来,主要是学习了Visual C++ .NET所提供的MFC(Microsoft Foundation Clas ...

随机推荐

  1. laravel数据库的创建和迁移

    数据库建立及迁移 Laravel 5 把数据库配置的地方改到了 `learnlaravel5/.env`,打开这个文件,编辑下面四项,修改为正确的信息: ? 1 2 3 4 5 6 7 DB_HOST ...

  2. SQL基础教程

    第一范式: 列仅包含原子值: 没有重复的组. 第二范式: 满足第一范式: 非部分函数依赖.(如果组合键中任何一列值改变,将导致非键列的值需要被更新) 那么,主键是一列(不是组合的)满足第二范式:所有列 ...

  3. htmlnav

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. c#播放器

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. Unity重力的测试

    其实和想象的结果还是有点出入 斜坡测试 (非悬空,直接把地面旋转成斜坡) 在非悬空状态下是不会受到斜坡的影响,只有进入悬空再进入斜坡,才会滑下去 一帧内关闭碰撞器再打开,或者一帧内打开Trigger再 ...

  6. hiho一下,第115周,FF,EK,DINIC

    题目1 : 网络流一·Ford-Fulkerson算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho住在P市,P市是一个很大很大的城市,所以也面临着一个 ...

  7. Axure一点2

    4:找茬:先安装图片,在不同的地方安上动态面板(命名为左一),在动态面板上双击,添加动态,进去动态后添加矩形改色,设置透明度为0,回到主页面.并设为隐藏,复制到另一面(命名为右一).在右一上添加图像热 ...

  8. 提高开发效率的 Eclipse 实用操作

    工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个“器”.本文会从Eclipse快捷键和实用技巧这两个篇章展开介绍.Eclipse快捷键用熟后,不用鼠标,便可进行编程开发,避免鼠标分 ...

  9. Jquery easyui 教程

            Jquery easyui教程                 目  录 1基本拖放... 4 2构建购物车型拖放... 5 3创建课程表... 8 4菜单和按钮Menu and Bu ...

  10. program

    [题目分析] 题目的意思是在一个数列中找到四个数,a[i]=a[j]<a[k]=a[l],其他都扯淡. 先把这些数sort一下,所有相等的数字就都排在一起了,然后这个数列可以按照数字的种类划分成 ...