看到一篇《如何獲取其他行程中ListView控制元件中的內容 》的文章,里面有:
//listview的列頭句柄
headerhwnd = ::SendMessage(hListview, LVM_GETHEADER, 0, 0);
//總行數:行程的數量
rows = ::SendMessage(hListview,LVM_GETITEMCOUNT,0,0);
//串列列數
cols = ::SendMessage(hListview, HDM_GETITEMCOUNT,0,0);
上面紅色中的LVM_是ListView Messages、HDM_是Header Messages的意思嗎?
謝謝!!!
uj5u.com熱心網友回復:
恭喜你,都會自問自答了
uj5u.com熱心網友回復:
到底是還是不是啊?
若是,那CVirtualGridCtrl要得到行數,是不是SendMessage一個VTG_GETITEMCOUNT啊?
謝謝答復!!!
uj5u.com熱心網友回復:
沒有VTG_GETITEMCOUNTP這訊息,還是用LVM_GETITEMCOUNTuj5u.com熱心網友回復:
老師,LVM_GETITEMCOUNT得不到CVirtualGridCtrl的行列數啊!
確實GETITEMCOUNT加VTG_、VTGM_和VGM_都提示錯誤。
請各位老師多多指教。
謝謝!!!
uj5u.com熱心網友回復:
列數 的視窗句柄應該是 HeadWnd::SendMessage(headerhwnd, HDM_GETITEMCOUNT
uj5u.com熱心網友回復:
hwnd = (HWND)::FindWindow(NULL, _T("VirtualGridCtrl Demo"));
//hwnd = (HWND)::FindWindowEx(hwnd, 0, _T("CVirtualGridCtrl"), NULL);
//行程界面視窗的句柄,通過SPY獲取
hVG = (HWND)::FindWindowEx(hwnd, 0, _T("CVirtualGridCtrl"), NULL);
//列頭句柄
headerhwnd = ::SendMessage(hVG, LVM_GETHEADER, 0, 0);//得不到句柄
//總行數
rows = ::SendMessage(hVG, LVM_GETITEMCOUNT, 0, 0);//得不到行數
//串列列數
cols = ::SendMessage(hVG, HDM_GETITEMCOUNT, 0, 0);//得不到列數
uj5u.com熱心網友回復:
LVM_HDM 訊息是針對系統的內置的 ListView 控制元件的,
其它的控制元件要看其是否支持這些訊息
uj5u.com熱心網友回復:
怎樣知道某控制元件支持哪些訊息?
謝謝!!!
uj5u.com熱心網友回復:
查詢MSDN檔案
uj5u.com熱心網友回復:
LVM_
HDM 訊息是針對系統的內置的 ListView 控制元件的,
其它的控制元件要看其是否支持這些訊息
怎樣知道某控制元件支持哪些訊息?
謝謝!!!
查詢MSDN檔案
謝謝版主的指教!!!
關鍵是第三次控制元件怎樣知道其有哪些訊息啊,比如上面提到的CVirtualGridCtrl?
uj5u.com熱心網友回復:
XXM_ 表示 Message所以 LVM 就是 ListView(MFC 叫 ListCtrl, W32 叫 ListView) Message
uj5u.com熱心網友回復:
類似XXS_ 是 Style
XXN_ 是 Notify
uj5u.com熱心網友回復:
類似
XXS_ 是 Style
XXN_ 是 Notify
謝謝回復!!!
我是想sendmessage獲得CVirtualGridCtrl中的資料,該發送什么訊息啊?
uj5u.com熱心網友回復:
http://blog.csdn.net/gdhuman/article/details/2678139uj5u.com熱心網友回復:
http://download.csdn.net/download/CHENJINHUACHAO/1282174uj5u.com熱心網友回復:
學會使用Spy++uj5u.com熱心網友回復:
http://blog.csdn.net/gdhuman/article/details/2678139
這篇文章是DELPHI寫的,我看過,但我不懂DELPHI。
還是謝謝你的熱心指導!!!
uj5u.com熱心網友回復:
你用 spy++ 看看 CVirtualGridCtrl 的 類名 是不是"SysHeader32"
"SysListView32"
如果是 就是 類似 CListCtrl 的。
下面的例子 是 找到 RemoteListCtrl 后, 讀取 item 的 內容:
void CRemoteListCtrlDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_bCaptured)
{//needn't restore cursor
::ReleaseCapture();
m_bCaptured = FALSE;
m_Finder.SetIcon(::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON2)));
// hide
ShowWindow(SW_HIDE);
if(m_hLvWnd !=0 )
{//
int Id=::GetDlgCtrlID(m_hLvWnd);
//afxDump << Id << "\n";// 1000
DWORD Style=GetWindowLong(m_hLvWnd,GWL_STYLE);
DWORD ExStyle=ListView_GetExtendedListViewStyle(m_hLvWnd);//not ModifyStyleEX() !!!;
if(ExStyle & LVS_EX_SUBITEMIMAGES)
{// error
// RemoteLVGetImageList(m_hLvWnd);
}
//afxDump << Style << "\n";
//afxDump << ExStyle << "\n";
CRect rc;
::GetWindowRect(m_hLvWnd,&rc);
rc.OffsetRect(-rc.left,-rc.top);
m_pLocalListCtrl=new CListCtrl;
m_pLocalListCtrl->Create(Style,rc,this,Id);
m_pLocalListCtrl->SetExtendedStyle(ExStyle);// not ModifyStyleEX() !!!;
// fill col
LPMYLVCOLUMN pCol=RemoteLVGetColumn(m_hLvWnd);
if(pCol)
{// GetItemCount
m_hHdWnd=ListView_GetHeader(m_hLvWnd);
int nColumn=::SendMessage(m_hHdWnd,HDM_GETITEMCOUNT,0,0);
for(int jj=0;jj<nColumn;jj++)
{
m_pLocalListCtrl->InsertColumn(jj,(LPLVCOLUMN)&pCol[jj]);
}
delete []pCol;
}
// fill items
int nItems =::SendMessage(m_hLvWnd,LVM_GETITEMCOUNT,0,0);
// afxDump << nItems << "\n";// 9
for(int jj=0;jj<nItems;jj++)
{
LPMYLVITEM pItem=RemoteLVGetItem(jj,m_hLvWnd);
if(pItem)
{
m_hHdWnd=ListView_GetHeader(m_hLvWnd);
int nColumn=::SendMessage(m_hHdWnd,HDM_GETITEMCOUNT,0,0);
int now=m_pLocalListCtrl->InsertItem((LPLVITEM)&pItem[0]);
for(int kk=1;kk<nColumn;kk++)
{
m_pLocalListCtrl->SetItemText(now,kk,pItem[kk].text); ;
}
delete []pItem;
}
}
m_pLocalListCtrl->ShowWindow(SW_SHOW);
// adjust dlg
DlgNewLayout();
CenterWindow();
ShowWindow(SW_SHOW);
}
}
// CDialog::OnLButtonUp(nFlags, point);
}
uj5u.com熱心網友回復:
你用 spy++ 看看 CVirtualGridCtrl 的 類名 是不是
"SysHeader32"
"SysListView32"
如果是 就是 類似 CListCtrl 的。
下面的例子 是 找到 RemoteListCtrl 后, 讀取 item 的 內容:
void CRemoteListCtrlDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_bCaptured)
{//needn't restore cursor
::ReleaseCapture();
m_bCaptured = FALSE;
m_Finder.SetIcon(::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON2)));
// hide
ShowWindow(SW_HIDE);
if(m_hLvWnd !=0 )
{//
int Id=::GetDlgCtrlID(m_hLvWnd);
//afxDump << Id << "\n";// 1000
DWORD Style=GetWindowLong(m_hLvWnd,GWL_STYLE);
DWORD ExStyle=ListView_GetExtendedListViewStyle(m_hLvWnd);//not ModifyStyleEX() !!!;
if(ExStyle & LVS_EX_SUBITEMIMAGES)
{// error
// RemoteLVGetImageList(m_hLvWnd);
}
//afxDump << Style << "\n";
//afxDump << ExStyle << "\n";
CRect rc;
::GetWindowRect(m_hLvWnd,&rc);
rc.OffsetRect(-rc.left,-rc.top);
m_pLocalListCtrl=new CListCtrl;
m_pLocalListCtrl->Create(Style,rc,this,Id);
m_pLocalListCtrl->SetExtendedStyle(ExStyle);// not ModifyStyleEX() !!!;
// fill col
LPMYLVCOLUMN pCol=RemoteLVGetColumn(m_hLvWnd);
if(pCol)
{// GetItemCount
m_hHdWnd=ListView_GetHeader(m_hLvWnd);
int nColumn=::SendMessage(m_hHdWnd,HDM_GETITEMCOUNT,0,0);
for(int jj=0;jj<nColumn;jj++)
{
m_pLocalListCtrl->InsertColumn(jj,(LPLVCOLUMN)&pCol[jj]);
}
delete []pCol;
}
// fill items
int nItems =::SendMessage(m_hLvWnd,LVM_GETITEMCOUNT,0,0);
// afxDump << nItems << "\n";// 9
for(int jj=0;jj<nItems;jj++)
{
LPMYLVITEM pItem=RemoteLVGetItem(jj,m_hLvWnd);
if(pItem)
{
m_hHdWnd=ListView_GetHeader(m_hLvWnd);
int nColumn=::SendMessage(m_hHdWnd,HDM_GETITEMCOUNT,0,0);
int now=m_pLocalListCtrl->InsertItem((LPLVITEM)&pItem[0]);
for(int kk=1;kk<nColumn;kk++)
{
m_pLocalListCtrl->SetItemText(now,kk,pItem[kk].text); ;
}
delete []pItem;
}
}
m_pLocalListCtrl->ShowWindow(SW_SHOW);
// adjust dlg
DlgNewLayout();
CenterWindow();
ShowWindow(SW_SHOW);
}
}
// CDialog::OnLButtonUp(nFlags, point);
}
uj5u.com熱心網友回復:
類 名 是 CVirtualGridCtrl 它自己注冊的。要 看 Head 視窗 和 List 視窗的 類名
uj5u.com熱心網友回復:
類似 GridCtrlDemo(class CGridCtrl : public CWnd ),CVirtualGridCtrl 可能 不是 來自 CListCtrl這樣就可以 沒有 訊息 可用
你下載15樓的 CVirtualGridCtr 原始碼 看看。
uj5u.com熱心網友回復:
類似 GridCtrlDemo(class CGridCtrl : public CWnd ),CVirtualGridCtrl 可能 不是 來自 CListCtrl
這樣就可以 沒有 訊息 可用
你下載15樓的 CVirtualGridCtr 原始碼 看看。
schlafenhamster真是熱心的好老師。謝謝!!!
CVirtualGridCtr 原始碼已下載。
有資料說,通過DLL注入可以得到 CVirtualGridCtr 的內容,但始終找不到DLL里該怎樣寫代碼的資料。
uj5u.com熱心網友回復:
“” CVirtualGridCtr 原始碼已下載。“”確定是不是你用 CVirtualGridCtr
告訴我 CVirtualGridCtr 從 哪里 派生, 有沒有 用到
"SysHeader32"
"SysListView32"
uj5u.com熱心網友回復:
“” CVirtualGridCtr 原始碼已下載。“”
確定是不是你用 CVirtualGridCtr
告訴我 CVirtualGridCtr 從 哪里 派生, 有沒有 用到
"SysHeader32"
"SysListView32"
再次深表感謝!!!
CVirtualGridCtr 是從 Delphi 的TGridView 改寫而成。
下面是CVirtualGridCtr 的注釋性說明:
// Written by Uri Mellshior <[email protected]>
// Copyright (c) 2002-2003. All Rights Reserved.
// Based on Delphi TGridView component written by Roman Mochalov, (c) 1997-2002.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is
// not sold for profit without the authors written consent, and
// providing that this notice and the authors name and all copyright
// notices remains intact.
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability for any damage/loss of business that
// this product may cause.
uj5u.com熱心網友回復:
不懂Delphi, 請參考http://baike.baidu.com/link?url=4JHpwjsnpkSoGJhcOxE1xGdkZDUQ6RatlOY_2f043JVYYQ9MAcY59rYNl4Fx2taaLpEyZd1r5r8KKT7Y0O5YDXqK69qOcOkbXesLKnIp1rq
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/111002.html
標籤:基礎類
上一篇:DisconnectEx用法求解
下一篇:ModbusTCP通訊協議
