検索
ホームページデータベースmysql チュートリアルMFC点点滴滴列表框使用list control(总结2)(编辑List Con

本文全面介绍了如何编辑List Control里面的任何子项 介绍 内容有点多,译出来也没多大意思,大致就是说一个VC程序员会常常碰到List Control,List Control有很多方法可以显示数据,可List Control里默认的没有编辑功能,故在此智短文里,那个牛叉的人教你怎

本文全面介绍了如何编辑List Control里面的任何子项

MFC点点滴滴列表框使用list control(总结2)(编辑List Con

 

介绍

内容有点多,译出来也没多大意思,大致就是说一个VC程序员会常常碰到List Control,List Control有很多方法可以显示数据,可List Control里默认的没有编辑功能,故在此智短文里,那个牛叉的人教你怎么实现这个功能。这篇文章是基于VC MFC滴,用别的功具的娃们当然也可以看看,呵呵,不多说,先实现图上ok exit两个按钮:

void CMultipleColumnsDlg::OK()

{

    CDialog::EndDialog (0); // Add this line

}

 

void CMultipleColumnsDlg::OnExit()

{

    CDialog::EndDialog (0); // Add this line

}

接下来添加一个ListCtrl控件,记得把ListCtrl的style设置成Report,这个是为了实现我们要多行显示的功能

然后增加一个文本框Edit Box去掉它的Border style属性

 

 

增加一个InsertItems() 成员函数,用来写入ListControl的显示内容

void CMultipleColumnsDlg::InsertItems()

{

    HWND hWnd = ::GetDlgItem(m_hWnd, IDC_LIST1);

    // Set the LVCOLUMN structure with the required

    // column information

   LVCOLUMN list;

    list.mask = LVCF_TEXT |LVCF_WIDTH|

        LVCF_FMT |LVCF_SUBITEM;

    list.fmt = LVCFMT_LEFT;

    list.cx = 50;

    list.pszText   = "S.No";

    list.iSubItem = 0;

    //Inserts the column

    ::SendMessage(hWnd,LVM_INSERTCOLUMN,

        (WPARAM)0,(WPARAM)&list);

    list.cx = 100;

    list.pszText   = "Name";

    list.iSubItem = 1;

    ::SendMessage(hWnd ,LVM_INSERTCOLUMN,

        (WPARAM)1,(WPARAM)&list);

    list.cx = 100;

    list.pszText   = "Address";

    list.iSubItem = 2;

    ::SendMessage(hWnd ,LVM_INSERTCOLUMN,

        (WPARAM)1,(WPARAM)&list);

    list.cx = 100;

    list.pszText   = "Country";

    list.iSubItem = 2;

    ::SendMessage(hWnd ,LVM_INSERTCOLUMN,

        (WPARAM)1,(WPARAM)&list);

    // Inserts first Row with four columns 插入行

    SetCell(hWnd,"1",0,0);

    SetCell(hWnd,"Prabhakar",0,1);

    SetCell(hWnd,"Hyderabad",0,2);

    SetCell(hWnd,"India",0,3);

    // Inserts second Row with four columns .

    SetCell(hWnd,"2",1,0);

    SetCell(hWnd,"Uday",1,1);

    SetCell(hWnd,"Chennai",1,2);

    SetCell(hWnd,"India",1,3);

 

 

}

 

自定义的SetCell( ) 函数,用来实现插入数据用的

void CMultipleColumnsDlg::SetCell(HWND hWnd1,

        CString value, int nRow, int nCol)

{

    TCHAR     szString [256];

    wsprintf(szString,value ,0);

    //Fill the LVITEM structure with the

    //values given as parameters.

    LVITEM lvItem;

    lvItem.mask = LVIF_TEXT;

    lvItem.iItem = nRow;

    lvItem.pszText = szString;

    lvItem.iSubItem = nCol;

    if(nCol >0)

        //set the value of listItem

        ::SendMessage(hWnd1,LVM_SETITEM,

            (WPARAM)0,(WPARAM)&lvItem);

    else

        //Insert the value into List

        ListView_InsertItem(hWnd1,&lvItem);

}

//通过行和列得到项目里面的数据

CString CMultipleColumnsDlg::GetItemText(

    HWND hWnd, int nItem, int nSubItem) const

{

    LVITEM lvi;

    memset(&lvi, 0, sizeof(LVITEM));

    lvi.iSubItem = nSubItem;

    CString str;

    int nLen = 128;

    int nRes;

    do

    {

        nLen *= 2;

        lvi.cchTextMax = nLen;

        lvi.pszText = str.GetBufferSetLength(nLen);

        nRes = (int)::SendMessage(hWnd,

            LVM_GETITEMTEXT, (WPARAM)nItem,

            (LPARAM)&lvi);

    str.ReleaseBuffer();

    return str;

}

}

 

//为窗口类添加两个成员变量:

int nItem, nSubItem;

用Class wizard 添加 NM_CLICK 响应,当用户点击任何位置时,就会对应出现一个Edit Box,并可以修改数据

void CMultipleColumnsDlg::OnClickList(

        NMHDR* pNMHDR, LRESULT* pResult)

{

    Invalidate();

    HWND hWnd1 = ::GetDlgItem (m_hWnd,IDC_LIST1);

    LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE) pNMHDR;

    RECT rect;

    //get the row number

    nItem = temp->iItem;

    //get the column number

    nSubItem = temp->iSubItem;

    if(nSubItem == 0 || nSubItem == -1 || nItem == -1)

        return ;

    //Retrieve the text of the selected subItem

    //from the list

    CString str = GetItemText(hWnd1,nItem ,

        nSubItem);

    RECT rect1,rect2;

    // this macro is used to retrieve the Rectanle

    // of the selected SubItem

    ListView_GetSubItemRect(hWnd1,temp->iItem,

        temp->iSubItem,LVIR_BOUNDS,&rect);

    //Get the Rectange of the listControl

    ::GetWindowRect(temp->hdr.hwndFrom,&rect1);

    //Get the Rectange of the Dialog

    ::GetWindowRect(m_hWnd,&rect2);

    int x=rect1.left-rect2.left;

    int y=rect1.top-rect2.top;

   

    if(nItem != -1)

    ::SetWindowPos(::GetDlgItem(m_hWnd,IDC_EDIT1),

        HWND_TOP,rect.left+x,rect.top+4,

        rect.right-rect.left - 3,

        rect.bottom-rect.top -1,NULL);

    ::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_SHOW);

    ::SetFocus(::GetDlgItem(m_hWnd,IDC_EDIT1));

    //Draw a Rectangle around the SubItem

    ::Rectangle(::GetDC(temp->hdr.hwndFrom),

       rect.left,rect.top-1,rect.right,rect.bottom);

    //Set the listItem text in the EditBox

    ::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT1),str);

    *pResult = 0;

}

To handle the ENTER key we need to write the virtual function OnOk (响应ENTER键)

afx_msg void OnOK();

In MultipleColumnsDlg.cpp write the following code.

// This function handles the ENTER key

void CMultipleColumnsDlg::OnOK()

 

    CWnd* pwndCtrl = GetFocus();

    // get the control ID which is

    // presently having the focus

    int ctrl_ID = pwndCtrl->GetDlgCtrlID();

    CString str;

    switch (ctrl_ID)

     //if the control is the EditBox

        case IDC_EDIT1:

        //get the text from the EditBox

        GetDlgItemText(IDC_EDIT1,str);

        //set the value in the listContorl with the

        //specified Item & SubItem values

        SetCell(::GetDlgItem (m_hWnd,IDC_LIST1),

            str,nItem,nSubItem);

        ::SendDlgItemMessage(m_hWnd,IDC_EDIT1,

           WM_KILLFOCUS,0,0);

        ::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),

            SW_HIDE);

            break;    

        default:

            break;

    }

}

最后一步在OnInitDialog 中设置List Control的样式       

ListView_SetExtendedListViewStyle(::GetDlgItem

        (m_hWnd,IDC_LIST1),LVS_EX_FULLROWSELECT |

        LVS_EX_GRIDLINES);

InsertItems();

::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_HIDE);


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
如何使用Python从列表中删除方括号如何使用Python从列表中删除方括号Sep 05, 2023 pm 07:05 PM

Python是一款非常有用的软件,可以根据需要用于许多不同的目的。Python可以用于Web开发、数据科学、机器学习等许多其他需要自动化处理的领域。它具有许多不同的功能,可以帮助我们执行这些任务。Python列表是Python的一个非常有用的功能之一。顾名思义,列表包含您希望存储的所有数据。它基本上是一组不同类型的信息。删除方括号的不同方法许多时候,用户会遇到列表项显示在方括号中的情况。在本文中,我们将详细介绍如何去掉这些括号,以便更好地查看您的列表。字符串和替换函数删除括号的最简单方法之一是在

我们可以在Java列表中插入空值吗?我们可以在Java列表中插入空值吗?Aug 20, 2023 pm 07:01 PM

SolutionYes,Wecaninsertnullvaluestoalisteasilyusingitsadd()method.IncaseofListimplementationdoesnotsupportnullthenitwillthrowNullPointerException.Syntaxbooleanadd(Ee)将指定的元素追加到此列表的末尾。类型参数E −元素的运行时类型。参数e −要追加到此列表的元

Del和remove()在Python中的列表上有什么区别?Del和remove()在Python中的列表上有什么区别?Sep 12, 2023 pm 04:25 PM

在讨论差异之前,让我们先了解一下Python列表中的Del和Remove()是什么。Python列表中的Del关键字Python中的del关键字用于从List中删除一个或多个元素。我们还可以删除所有元素,即删除整个列表。示例使用del关键字从Python列表中删除元素#CreateaListmyList=["Toyota","Benz","Audi","Bentley"]print("List="

使用Python根据列表创建多个目录使用Python根据列表创建多个目录Sep 08, 2023 am 08:21 AM

Python凭借其简单性和多功能性,已成为各种应用程序中最流行的编程语言之一。无论您是经验丰富的开发人员还是刚刚开始编码之旅,Python都提供了广泛的功能和库,使复杂的任务变得易于管理。在本文中,我们将探讨一个实际场景,Python可以通过自动执行基于列表创建多个目录的过程来帮助我们。通过利用Python内置模块和技术的强大功能,我们可以有效地处理此任务,而无需手动干预。在本教程中,我们将深入研究创建多个目录的问题,并为您提供使用Python解决该问题的不同方法。在本文结束时,我们的目标是为您

如何使用 Vue 实现可折叠列表?如何使用 Vue 实现可折叠列表?Jun 25, 2023 am 08:45 AM

Vue是一款流行的JavaScript库,广泛应用于Web开发领域。在Vue中,我们可以很方便地实现各种组件和交互效果。其中,可折叠列表是一个比较实用的组件,它可以将列表数据分组,提高数据展示的可读性,同时又能够在需要展开具体内容时进行展开,方便用户查看详细信息。本文就将介绍如何使用Vue实现可折叠列表。准备工作在使用Vue实现可折叠列

在Java中从列表中随机选择项目在Java中从列表中随机选择项目Sep 06, 2023 pm 08:33 PM

List是JavaCollection接口的子接口。它是一种线性结构,按照顺序存储和访问每个元素。为了使用list的特性,我们使用实现了list接口的ArrayList和LinkedList类。在本文中,我们将创建一个ArrayList,并尝试随机选择该列表中的项目。在Java中随机选择列表中的项目的程序随机类别我们创建此类的对象来生成伪随机数。我们将自定义该对象并应用我们自己的逻辑从列表中选择任何随机项目。语法RandomnameOfObject=newRandom();Example1的翻译

iOS 17:如何设置和标记多个计时器iOS 17:如何设置和标记多个计时器Sep 19, 2023 pm 03:29 PM

花了这么长时间,但在iOS17中,Apple增加了对多个计时器的支持,并且还通过引入标签使在iPhone上管理多个计时器变得容易。没错。信不信由你,到目前为止,iPhone还没有包括设置多个持续计时器的功能。在iOS17,时钟应用程序最终可以设置多个计时器,这些计时器将同时运行,使您可以跟踪多件事,例如,这在烹饪包含多道菜的餐点时很方便。您不仅可以同时有多个计时器倒计时,还可以标记计时器,这有助于您在计时器列表中识别每个计时器。这样,您将始终知道哪个计时器与什么相关,并且可以保存自定义计时器,而

使用while循环计算列表中数字的总和的Java程序使用while循环计算列表中数字的总和的Java程序Sep 13, 2023 pm 09:05 PM

介绍使用while循环计算列表中数字总和的Java程序是一个简单的程序,它获取整数列表并使用while循环结构计算它们的总和。在此程序中,创建了一个整数ArrayList,并将一些数字添加到该列表中。然后,程序使用while循环迭代列表中的每个元素,将每个元素添加到变量“sum”中,该变量跟踪数字的运行总和。循环完成后,“sum”的最终值将打印到控制台,它是列表中所有数字的总和。该程序演示了在编程中处理数据集合的常用技术,即使用循环迭代集合中的每个元素并对每个元素执行一些计算或转换。该计划还重点

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。