有没有用SDK编程的,请教一个问题。是学SDK的都来支持一下啊!关于如何从ListView中建立的combobox中取数的问题。

speedzzx1 2005-03-31 04:22:15
详细说明如下:
我的主窗口中有一个ListView,那么我根据主窗口是否有变化,并判断是不是ListView引起。而后根据不同的消息进行不同的处理,如下:
LRESULT CALLBACK MainWndProc( HWND hwnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{.............
case WM_NOTIFY: //如果MainWnd有变化
if(ID_LISTVIEW == wParam)//并且是ListView引起
{
lResult = OnListViewNotify(hwnd, lParam);//处理这个ListView引起的消息lParam
}

也就是说,这些消息的处理必须放到控件的父窗口进行处理。
而现在,我在ListView的一个subItem的位置建立了一个combobox,如下:
LRESULT OnListViewNotify( HWND hwnd,LPARAM lParam)
{
NMHDR* pnmh = (NMHDR*) lParam;
LRESULT lResult = 0;
NMLVDISPINFO *pLVdi;
case LVN_ITEMACTIVATE://当我点击某一行时
..........................//得到行的信息,比如高度,列数,此处略去
if(IsCombo(col))//如果是需要画combobox的那一列
{
if (!(hwndCombo = CreateWindowEx (0, TEXT("combobox"),NULL,
dwStyle, SubItemRect.left,SubItemRect.top,
150,600,g_hwndListView, (HMENU)ID_COMBOBOX, g_hInst, NULL)))
return NULL;
// // Add 10 items to the combo box.//下面是给这个combobox加入10个item.


现在的问题就是,如果我的这个combobox有消息发生,那么应该是在他的父窗口接受并处理,但是他的父窗口ListView(g_hwndListView)建立时和mainWnd不同,没有回调函数,主要是没有带lparam这个参数,

试过用 LVN_ITEMCHANGED:来进行处理,但是这个消息会在点击ListView,而其中内容还未改变时就发出,太灵敏了。

所有的问题兜详细解释如上,请指点。
...全文
374 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
我想知道从combobox中取数,是经过响应无数次消息吗。比如KILLFOCUS消息,在我点击combobox就一直在发生,我想得到下拉后的结果,可是这个消息一开始就把第一个还没有下拉时的条目内容给我了.
开始远离编程 2005-04-04
  • 打赏
  • 举报
回复
up
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
if(ID_LISTVIEW == LOWORD(wParam))与if(ID_LISTVIEW == wParam)很多时候没有区别,晕,问题越来越多。
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
我发现一个奇怪的问题:if ( Message ==CBN_DROPDOWN)可以运行下面的代码,换成if ( HIWORD(wParam) == CBN_DROPDOWN)就不对了,而用if ( Message == CBN_SELCHANGE )却是错误的,而用if ( HIWORD(wParam) == CBN_SELCHANGE )反而可以,很无奈。
fang58 2005-04-04
  • 打赏
  • 举报
回复
关注
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
还有一点,您是不是说
LRESULT CALLBACK SubListViewFunc(HWND hWnd,UINT Message,WPARAM wParam,LONG lParam)中wParam与Message有部分的重复(在消息部分)?
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
前辈,我试了一下您的方法,我觉得应该肯定是没有问题的,但是依然没有进入下面的代码 case WM_COMMAND:
if(ID_COMBOBOX ==LOWORD(wParam))
lResult =SubComboboxFunc(hWnd, Message,wParam,lParam);

而我用您同样的考虑方式子类化Combobox,我发现基本没有问题,只是不知道如何得到中的内容,因为我一点击这个Combobox,他就KILLFOCUS,根本没有给我下拉选择中内容的机会,所以得到的内容永远是第一个条目的。

而子类化ListView的问题就一直没有进展!

tjucruiser 2005-04-04
  • 打赏
  • 举报
回复
gz
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
为什么子类化自己(Combobox),得到的选项序号永远是第一个,而用您的做法却没有问题。难道子类化必须是上一级的?
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
解决了,谢谢前辈!
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
我试过了,得到的选项序号永远是第一个,顺便问一句,得到Index后,怎么得到其中的内容?
ringphone 2005-04-04
  • 打赏
  • 举报
回复
LRESULT CALLBACK SubListViewFunc(HWND hWnd,UINT Message,WPARAM wParam,LONG lParam)中wParam与Message有部分的重复(在消息部分)
------------------------------------------------------
没有重复,message是WM_COMMAND的时候,wParam低4位是控件ID,高4位是控件通知消息。lParam是控件句柄
ringphone 2005-04-04
  • 打赏
  • 举报
回复
if(ID_COMBOBOX == LOWORD(wParam))
{
lResult =SubComboboxFunc(hWnd, Message,wParam,lParam);
}

break;

这个SubComboboxFunc(hWnd, Message,wParam,lParam);不知道你是怎么写的,看起来象是窗口过程,
你并不需要子类化ComboBox,按你现在的代码,这个SubComboboxFunc应该这么写,如果这个函数仅在这个WM_COMMAND里面调用的话:
LRESULT SubComboboxFunc(hWnd, Message,wParam,lParam)
{
if(HIWORD(wParam) == CBN_SELCHANGE)
{
//得到选项序号
int index = SendMessage((HWND)lParam,CB_GETCURSEL,0,0);
//继续其他操作...
}
return 0;
}
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
这个问题解决了,是我搞错了,不好意思前辈,我代码改动后把子类化的窗口句柄给错了,您的做法一点都没有错。在此特别感谢。
现在就剩下我上面提到的几个小细节问题:我想知道如何从combobox中取数,WM_KILLFOCUS消息,在我点击combobox就一直在发生,我想得到下拉后的结果,可是这个消息一开始就把第一个还没有下拉时的条目内容给我了.

还有一点,您是不是说
LRESULT CALLBACK SubListViewFunc(HWND hWnd,UINT Message,WPARAM wParam,LONG lParam)中wParam与Message有部分的重复(在消息部分)?这两者(wParam与Message)的消息部分的使用有区别吗?

speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
应该没有问题吧
speedzzx1 2005-04-04
  • 打赏
  • 举报
回复
#define ID_COMBOBOX 104

if (!(hwndCombo = CreateWindowEx (0,
TEXT("combobox"),
NULL,
dwStyle, SubItemRect.left,SubItemRect.top,
150,/*SubItemRect.right-SubItemRect.left*/
600,
g_hwndListView,
(HMENU)ID_COMBOBOX,
g_hInst,
NULL)))
return NULL;
ringphone 2005-04-04
  • 打赏
  • 举报
回复
speedzzx1(试问) ,
我想知道你这个ID_COMBOBOX是多少,如果这个值超过0xFFFF,那是会有问题,你必须把这个值改小。
ringphone 2005-04-03
  • 打赏
  • 举报
回复
手误,上面的HIWORD(lParam)应该是HIWORD(wParam)
ringphone 2005-04-03
  • 打赏
  • 举报
回复
还有ListView的窗口过程不用处理WM_NOTIFY,应该是主窗口处理
ringphone 2005-04-03
  • 打赏
  • 举报
回复
if(ID_COMBOBOX == wParam)//从来没有进入下面括号内的语句,为何?
----------------------------------------
看看WM_COMMAND的说明,应该是if(ID_COMBOBOX == LOWORD(wParam))
HIWORD(lParam)里是Combobox的通知消息,CBN_EDITCHANGE之类
加载更多回复(12)
SkinMagic SDK是为C/C++程序员设计的函库,通过使用该库提供的API可以很方便的为你 的应用程序增加最流行的换皮肤的功能。SkinMagic是基于图片的皮肤系统,只要简单的几个 函调用你的应用程序就具有了换皮肤的功能。通过SkinMagicBuilder皮肤编辑工具,你可以 定制自己特色的皮肤。 History of SkinMagic for C/C++ 2003.3.1 SkinMagic SDK V1.0 Bug Fixed: 1,SkinMagic SDK *Fix Radio button flicker problem *Fix Check button flicker problem *Fix Menu paint problem under MDI window *Fix Rebar problem *Fix menu scroll problem *Fix flicker problem when change skin. +Add automatic adjust control position by skin +Add font property to all control 2,SkinMagicBuilder +Add Zoom tool +Add Visual Object Editor +Add WYSWYG skin control edit. +Add SkinMagicEditor use guide. +Add more you can find in program. 2003.2.18 SkinMagic SDK V0.9 SP1 Bug Fixed: +SkinMagic.DLL support VC7(VC.NET) *Fix drag horizontal toolbar and drop to vertical dock position problem. *Fix MDI client window paint problem. *Fix Toolbar flicker problem. =========================== SkinMagic SDK Version0.8 =========================== 增加功能: 1,支持多线程 2,增加对Tab换皮肤功能 3,增加对Edit换皮肤功能 4,增加对RichEdit换皮肤功能 5,增加对ListBox换皮肤功能 6,增加对TreeView换皮肤功能 7,增加对ListView换皮肤功能 8,增加对Header换皮肤功能 9,增加对ScrollBar控件换皮肤功能 10,增加对Tab换皮肤功能 11,增加对Simple的ComboBox的换皮肤功能 12,增加TrackSkinPopupMenu函支持右键菜单的换皮肤。 13,增加两个函支持非标准的窗口的滚动条的换皮肤。 14,增加几个新的皮肤文件 15,增加SDK和WTL的例子程序,增加一个控件换皮肤的例子程序。 16,增加一个对话框窗口显示菜单的例子程序。 17,增加一个用于动态链接MFC库的LIB 修订的问题: 1,RemoveWindowSkin有问题会导致窗口的菜单丢失,程序退出的时候死机。 2,工具条上Disable的按钮的图标没有显示成Disable的状态。 3,在状态栏的三个(通常情况)键盘状态指示器:NumLock,CapsLock,ScrollLock好像不能随键盘的状态的改变而动态地改变! 4,有时候系统按钮的菜单状态不是很合理 5,工具条从前在Button旁边有箭头表示该按钮支持菜单,现在使用该库以后箭头不见了 6,解决MDI窗口的一个刷新问题。 7,解决MFC库定义的函连接的时候重复定义的问题。 8,修订无法实时刷新更新的菜单的问题。 ================================= SkinMagic SDK for Visual C++ Website:http://www.appspeed.com/ Support:support@appspeed.com =================================

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧