S
smithcouple
Unregistered / Unconfirmed
GUEST, unregistred user!
我最近在用Delphi直接使用API写程序,没有使用任何VCL组件<br><br>遇到一个问题,<br>我创建了一个GroupBox,并在GroupBox里创建了ListView 比如<br> GPB := CreateWindow('Button', 'GroupBox',<br> WS_CHILD or WS_VISIBLE or BS_GROUPBOX, 8, 220, 436, 148, hWindow, 0, Inst, nil);<br> LSV := CreateWindowEx(WS_EX_CLIENTEDGE, 'SysListView32', '',<br> WS_CHILD or WS_VISIBLE or WS_TABSTOP or LVS_REPORT,<br> 12, 24, 412, 112, GPB, 0, Inst, nil);<br><br>我希望在窗口被创建的时候就初始化好ListView的几个Column列,所以在主窗口的WindowProc中,写入:<br>var<br> LV: TLVColumn;<br>....<br>case MSG of <br> WM_CREATE: begin<br> LV.mask := LVCF_TEXT or LVCF_WIDTH;<br> LV.cx := 60;<br> LV.pszText := PChar('Text');<br> SendMessage(LSV, LVM_INSERTCOLUMN, 0, LongInt(@LV));<br> SendMessage(LSV, LVM_INSERTCOLUMN, 1, LongInt(@LV));<br> end;<br>....<br><br><br>发现根本没有效果,但可以确定 主窗口的WM_CREATE确实被发送了<br><br><br>后来尝试在GroupBox的消息循环里做:<br>GPBWndProcOld := Pointer(SetWindowLong(GPB, GWL_WNDPROC, LongInt(@GPBWndProc)));<br><br>function GPBWndProc(HGPB: HWnd; MSG, wParam, lParam: Integer): LongInt;<br>var<br> LV: TLVColumn;<br>begin<br> Result := 0;<br><br> case MSG of<br> WM_CREATE: begin<br> LV.mask := LVCF_TEXT or LVCF_WIDTH;<br> LV.cx := 60;<br> LV.pszText := PChar('12');<br> SendMessage(LSV, LVM_INSERTCOLUMN, 0, LongInt(@LV));<br> SendMessage(LSV, LVM_INSERTCOLUMN, 1, LongInt(@LV));<br> end;<br> else<br> Result := CallWindowProc(GPBWndProcOld, HGPB, MSG, wParam, lParam);<br> end;<br>end;<br><br>仍然没效果,我加入了一个MessageBox,发现GroupBox的WM_CREATE根本没反应,但如果我加一个Button,在Button的WM_COMMAND时候发送消息<br> Sendmessage(GRP, WM_CREATE, 0,0); <br>甚至直接设置 SendMessage(LSV, LVM_INSERTCOLUMN, 0, LongInt(@LV));<br>都能看到ListView的列确实被添加了。<br><br>另外,我将ListView从GroupBox中移出,直接放在主窗口下,然后再主窗口消息循环中,设置WM_CREATE: SendMessage(LSV, LVM_INSERTCOLUMN, 0, LongInt(@LV));也可以顺利的添加上列。<br><br>请问这是为什么,难道WM_CREATE只是针对于主窗口?<br>那应该如何在窗口初始化的时候就创建好ListView的列呢?我的ListView一定要放在GroupBox中。<br>我也看了一些VC++的代码,他们都可以很顺利的创建的。<br>刚开始接触这个几天,所以好多地方都很生疏<br>先谢谢各位的帮助!