|
From: Rob M. <ro...@th...> - 2011-03-28 08:06:32
|
Quickly guessing (I don't have an environment to test this at the moment):
This code:
my $paskl3 = pack('IIIIIPIIIIIIIII',
1|16|512, # LVIF_TEXT | LVIF_INDENT | LVIF_COLUMNS
0, # item index
0, # subitem index
0, # state index
0, # statemask index
"Item1", # item text
5, # item text buffer
0, # image
0, # param
0, # indent
0, # group id is 0
0, # ccolumns
0, # pucolumns
0, # group id is 0
0 # igroup
);
may not do what you think, as I don't think the pack() will increment
the reference count of the "item1" string, and so I think it will
immediately go out of scope after the pack command leaving the
structure pointing to potentially random string data.
Try this instead:
my $item1 = "item1";
my $paskl3 = pack('IIIIIPIIIIIIIII',
1|16|512, # LVIF_TEXT | LVIF_INDENT | LVIF_COLUMNS
0, # item index
0, # subitem index
0, # state index
0, # statemask index
$item1, # item text
5, # item text buffer
0, # image
0, # param
0, # indent
0, # group id is 0
0, # ccolumns
0, # pucolumns
0, # group id is 0
0 # igroup
);
I think the listbox makes a copy of the text - so that should be sufficient.
Let us know how you get on.
Regards,
Rob.
On 27 March 2011 14:44, FPerl <tar...@ho...> wrote:
>
> Hi,
>
> I'm testing ListView Groups on my Windows 7 os.This code working perfect but
> text values displaying in Chinese charset.
> I writing value in latin char but this app displaying Unicode char.I not
> understand.
> Where is the wrong? Thank you.
> ( Perl v5.10 Win32::GUI v1.06 ).
>
> Image :
> http://old.nabble.com/file/p31250335/2c7119b6.png
>
> Installed language packs;English, Turkish
>
> use strict;
> use warnings;
>
> use Win32::GUI qw( WS_VISIBLE WS_CHILD );
>
> sub LVS_REPORT() {0x0001};
> sub LVM_FIRST() {4096};
> sub LVM_ENABLEGROUPVIEW() {LVM_FIRST + 157};
> sub LVM_INSERTCOLUMN() {LVM_FIRST + 27};
> sub LVM_INSERTITEM() {LVM_FIRST + 7};
> sub LVM_INSERTGROUP() {LVM_FIRST + 145};
> sub LVIF_GROUPID() { 256 };
> sub LVM_SETITEM() {LVM_FIRST + 76 };
> sub LVGF_HEADER() {1};
> sub LVGF_FOOTER() {2};
> sub LVGF_GROUPID() {16};
> sub LVGF_ALIGN() {8};
> sub LVGF_STATE() {4};
> sub LVGA_FOOTER_LEFT() {8};
> sub LVGS_COLLAPSIBLE() {0x00000008};
>
> my $Win = new Win32::GUI::Window(
> -width => 330,
> -height => 269,
> -name => "Win",
> -text => "listview group test",
> -onResize => \&win_size,
> );
>
> my $datalistview = $Win->AddListView(
> -text => "",
> -name => "ListView_1",
> -checkboxes => 1,
> -style => WS_VISIBLE | WS_CHILD | LVS_REPORT , # LVS_REPORT for the
> report style
> );
> #-------------------------------------------------------------------------------------------------------------------#
> # MSDN create and inset column api
> # msdn url : http://msdn.microsoft.com/en-us/library/bb774743(v=VS.85).aspx
> # UINT mask;
> # int fmt;
> # int cx;
> # LPTSTR pszText;
> # int cchTextMax;
> # int iSubItem;
> # int iImage;
> # int iOrder;
> # int cxMin;
> # int cxDefault;
> # int cxIdeal;
> # Inserting Column1
> my $paskl = pack('IIIPIIIIIII',
> 1|23|8|4|2, # LVCF_FMT | LVCF_ORDER | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH
> 0, # LVCFMT_LEFT
> 110, # Column Width
> "Column1", # Column Text
> 1024, # Column Text buffer
> 0, # SubItem
> 0, # Image
> 0, # Order
> 0, # avaible in vista; not used
> 0, # avaible in vista; not used
> 0 # avaible in vista; not used
> );# "Column1",0,-0- this is index
> my $returnvalue1 = $datalistview->SendMessage(LVM_INSERTCOLUMN,0,$paskl);
> print "Column1 index = $returnvalue1\n";
>
> # Inserting Column2
> my $pask2 = pack('IIIPIIIIIII',
> 1|23|8|4|2, # LVCF_FMT | LVCF_ORDER | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH
> 0, # LVCFMT_LEFT
> 110, # Column Width
> "Column2", # Column Text
> 1024, # Column Text buffer
> 1, # SubItem
> 0, # Image
> 0, # Order
> 0, # avaible in vista; not used
> 0, # avaible in vista; not used
> 0 # avaible in vista; not used
> );# "Column1",0,-0- this is index
> my $returnvalue2 = $datalistview->SendMessage(LVM_INSERTCOLUMN,1,$pask2);
> print "Column2 index = $returnvalue2\n";
> #-------------------------------------------------------------------------------------------------------------------#
> # Inserting items to ListView
> # typedef struct {
> # UINT mask;
> # int iItem;
> # int iSubItem;
> # UINT state;
> # UINT stateMask;
> # LPTSTR pszText;
> # int cchTextMax;
> # int iImage;
> # LPARAM lParam;
> # if (_WIN32_IE >= 0x0300)
> # int iIndent;
> # endif
> # if (_WIN32_WINNT >= 0x0501)
> # int iGroupId;
> # UINT cColumns;
> # UINT puColumns;
> # endif
> # if (_WIN32_WINNT >= 0x0600)
> # int piColFmt;
> # int iGroup;
> # endif
> # } LVITEM, *LPLVITEM;
>
> my $paskl3 = pack('IIIIIPIIIIIIIII',
> 1|16|512, # LVIF_TEXT | LVIF_INDENT | LVIF_COLUMNS
> 0, # item index
> 0, # subitem index
> 0, # state index
> 0, # statemask index
> "Item1", # item text
> 5, # item text buffer
> 0, # image
> 0, # param
> 0, # indent
> 0, # group id is 0
> 0, # ccolumns
> 0, # pucolumns
> 0, # group id is 0
> 0 # igroup
> );
> my $institem1 = $datalistview->SendMessage(LVM_INSERTITEM,0,$paskl3);
> print "Item1 index = $institem1\n";
>
> my $paskl4 = pack('IIIIIPIIIIIIIII',
> 1|16|512, # LVIF_TEXT | LVIF_INDENT | LVIF_COLUMNS
> 1, # item index
> 0, # subitem index
> 0, # state index
> 0, # statemask index
> "Item2", # item text
> 5, # item text buffer
> 0, # image
> 0, # param
> 0, # indent
> 1, # group id is 0
> 0, # ccolumns
> 0, # pucolumns
> 0, # group id is 0
> 0 # igroup
> );
> my $institem2 = $datalistview->SendMessage(LVM_INSERTITEM,1,$paskl4);
> print "Item2 index = $institem2\n";
> #-------------------------------------------------------------------------------------------------------------------#
> # Sending message to listview and enabling group
> # msdn url : http://msdn.microsoft.com/en-us/library/aa931484.aspx
> # (HWND) hWndControl,
> # (UINT) LVM_ENABLEGROUPVIEW,
> # (WPARAM) wParam, // = (WPARAM) (BOOL) fEnable;
> # (LPARAM) lParam // = (LPARAM) (LPARAM) lParam;
> $datalistview->SendMessage(LVM_ENABLEGROUPVIEW,1,0);
> #-------------------------------------------------------------------------------------------------------------------#
>
> #-------------------------------------------------------------------------------------------------------------------#
> # msdn url : http://msdn.microsoft.com/en-us/library/aa453426.aspx
> # creating listview group
> # UINT cbSize;
> # UINT mask;
> # LPWSTR pszHeader;
> # int cchHeader;
> # LPWSTR pszFooter;
> # int cchFooter;
> # int iGroupId;
> # UINT stateMask;
> # UINT state;
> # UINT uAlign;
> # if _WIN32_WINNT >= 0x0600
> # LPWSTR pszSubtitle;
> # UINT cchSubtitle;
> # LPWSTR pszTask;
> # UINT cchTask;
> # LPWSTR pszDescriptionTop;
> # UINT cchDescriptionTop;
> # LPWSTR pszDescriptionBottom;
> # UINT cchDescriptionBottom;
> # int iTitleImage;
> # int iExtendedImage;
> # int iFirstItem;
> # UINT cItems;
> # LPWSTR pszSubsetTitle;
> # UINT cchSubsetTitle;
> my $pasklaav = pack('IIPIIIIIIIIIIIIIIIIIIIII',
> 1024, # cbSize
> LVGF_HEADER|LVGF_GROUPID|LVGF_ALIGN|LVGF_STATE,
> "test1", # adding group text pszHeader
> 256, # char size of text
> 0, # pszFooter
> 0, # cchFooter
> 0, # GroupId
> 0, # statemask
> LVGS_COLLAPSIBLE, # state
> LVGA_FOOTER_LEFT, # Aling
> 0, # pszSubtitle
> 0, # cchSubtitle
> 0, # pszTask
> 0, # cchTask
> 0, # pszDescriptionTop
> 0, # cchDescriptionTop
> 0, # pszDescriptionBottom
> 0, # cchDescriptionBottom
> 0, # iTitleImage
> 0, # iExtendedImage
> 0, # iFirstItem
> 0, # cItems
> 0, # pszSubsetTitle
> 0 # cchSubsetTitle
> );
> # inserting the group to listview
> my $insetgroupv = $datalistview->SendMessage(LVM_INSERTGROUP,-1,$pasklaav);
> print "insgroup1 - $insetgroupv\n";
>
>
> my $pasklaavt = pack('IIPIIIIIIIIIIIIIIIIIIIII',
> 1024, # cbSize
> LVGF_HEADER|LVGF_GROUPID|LVGF_ALIGN|LVGF_STATE,
> "test1", # adding group text pszHeader
> 256, # char size of text
> 0, # pszFooter
> 0, # cchFooter
> 1, # GroupId
> 0, # statemask
> LVGS_COLLAPSIBLE, # state
> LVGA_FOOTER_LEFT, # Aling
> 0, # pszSubtitle
> 0, # cchSubtitle
> 0, # pszTask
> 0, # cchTask
> 0, # pszDescriptionTop
> 0, # cchDescriptionTop
> 0, # pszDescriptionBottom
> 0, # cchDescriptionBottom
> 0, # iTitleImage
> 0, # iExtendedImage
> 0, # iFirstItem
> 0, # cItems
> 0, # pszSubsetTitle
> 0 # cchSubsetTitle
> );
> # inserting the group to listview
> my $insetgroupvt =
> $datalistview->SendMessage(LVM_INSERTGROUP,-1,$pasklaavt);
> print "insgroup2 - $insetgroupvt\n";
> #-------------------------------------------------------------------------------------------------------------------#
> # http://msdn.microsoft.com/en-us/library/aa453430(MSDN.10).aspx
> # Seting item with listview group
> # typedef struct _LVITEM {
> # UINT mask;
> # int iItem;
> # int iSubItem;
> # UINT state;
> # UINT stateMask;
> # LPTSTR pszText;
> # int cchTextMax;
> # int iImage;
> # LPARAM lParam;
> # if (_WIN32_IE >= 0x0300)
> # int iIndent;
> # endif
> # int iGroupId;
> # } LVITEM;
> my $pasklaaas = pack('IIIIIIIIIII',
> LVIF_GROUPID, # mask
> 0, # item index
> 0, # subitem
> 0, # state
> 0, # statemask
> 0, # pszText
> 0, # Text buffer
> 0, # image index
> 0, # lParam
> 0, # iIndent
> 0, # groupid
> );
> my $insetgroupas = $datalistview->SendMessage(LVM_SETITEM,0,$pasklaaas);
> print "setgroup1 - $insetgroupas\n";
>
> my $pasklaaast = pack('IIIIIIIIIII',
> LVIF_GROUPID, # mask
> 1, # item index
> 0, # subitem
> 0, # state
> 0, # statemask
> 0, # pszText
> 0, # Text buffer
> 0, # image index
> 0, # lParam
> 0, # iIndent
> 1, # groupid
> );
> my $insetgroupast = $datalistview->SendMessage(LVM_SETITEM,0,$pasklaaast);
> print "setgroup2 - $insetgroupast\n";
>
> #-------------------------------------------------------------------------------------------------------------------#
> $Win->Center();
> $Win->Show();
> Win32::GUI::Dialog();
>
> sub win_size {
> my ($self) = @_;
> my ($width, $height) = ($self->GetClientRect())[2..3];
> $self->ListView_1->Resize($width+1, $height+1) if exists
> $self->{ListView_1};
> }
>
> Regards...
> --
> View this message in context: http://old.nabble.com/Win32%3A%3AGUI-ListBox-Group---Why-display-text-values-in-Chinese-charset--tp31250335p31250335.html
> Sent from the perl-win32-gui-users mailing list archive at Nabble.com.
>
>
> ------------------------------------------------------------------------------
> Enable your software for Intel(R) Active Management Technology to meet the
> growing manageability and security demands of your customers. Businesses
> are taking advantage of Intel(R) vPro (TM) technology - will your software
> be a part of the solution? Download the Intel(R) Manageability Checker
> today! http://p.sf.net/sfu/intel-dev2devmar
> _______________________________________________
> Perl-Win32-GUI-Users mailing list
> Per...@li...
> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users
> http://perl-win32-gui.sourceforge.net/
>
|