WinApi获取组合框项的窗口句柄

WinApi获取组合框项的窗口句柄,winapi,mfc,combobox,ccombobox,Winapi,Mfc,Combobox,Ccombobox,我试图在WinApi中的CComboBox项上绘制一些东西。 要做到这一点,我需要一个窗口句柄来表示该项(其中包含特定项)。 我有个问题,这可能吗? 我怎么做? 或者,也许你有另一个想法,如何在ComboBox的特定项目上绘制。 Przemek如果要自定义cmbobox,必须从cmbobox类继承并重写函数OnCtlColor。查看如果要自定义cmbobox,必须从cmbobox类继承并重写函数OnCtlColor。查看您需要的是一个所有者绘制的组合框 参考文档,了解如何在绘制每个项目时获取其句

我试图在WinApi中的CComboBox项上绘制一些东西。 要做到这一点,我需要一个窗口句柄来表示该项(其中包含特定项)。 我有个问题,这可能吗? 我怎么做? 或者,也许你有另一个想法,如何在ComboBox的特定项目上绘制。
Przemek

如果要自定义cmbobox,必须从
cmbobox
类继承并重写函数
OnCtlColor
。查看如果要自定义cmbobox,必须从
cmbobox
类继承并重写函数
OnCtlColor
。查看

您需要的是一个所有者绘制的组合框

参考文档,了解如何在绘制每个项目时获取其句柄以及如何绘制

框架为一个对象的所有者调用此成员函数 所有者绘制组合框控件、列表框控件时的视觉效果 控件已更改


注意:在创建组合框时,必须指定样式
CBS_OWNERDRAWVARIABLE
。(您也可以从visual studio资源编辑器中组合框的属性窗口进行设置。)

您需要的是一个所有者绘制的组合框

参考文档,了解如何在绘制每个项目时获取其句柄以及如何绘制

框架为一个对象的所有者调用此成员函数 所有者绘制组合框控件、列表框控件时的视觉效果 控件已更改



注意:在创建组合框时,必须指定样式
CBS_OWNERDRAWVARIABLE
。(您也可以从visual studio资源编辑器中组合框的“属性”窗口进行设置。)

它为我提供了整个组合框的句柄。我想用其中的一个项目来代替。也许你的方法很好,但我必须做一个额外的工作,只画一个矩形的项目。Przemek@PrzemyslawWisniewski当前位置读完你的问题后,我想你需要的是如何获得组合框的句柄。我会更新我的答案,它给了我整个组合框的句柄。我想用其中的一个项目来代替。也许你的方法很好,但我必须做一个额外的工作,只画一个矩形的项目。Przemek@PrzemyslawWisniewski当前位置读完你的问题后,我想你需要的是如何获得组合框的句柄。我会更新我的答案,非常感谢,也许这就是我要找的。如果我的申请有问题,我会在这里发布。谢谢man@PrzemyslawWisniewski很乐意帮忙!如果你觉得答案有帮助的话,请记住接受。好的,谢谢。我还有一个关于上一个问题的问题。我得到了类似void ccustomcombox::DrawItem(LPDRAWITEMSTRUCT LPDRAWITEMSTRUCT){HDC memory;LineTo(memory,10,10);…HDC HDC=::GetDC(LPDRAWITEMSTRUCT->hwnItem);…BitBlt(HDC,0,0,20,20,memory,0,0,SRCCOPY);}它不会将内存复制到HDC,有人知道为什么吗?Przemek@PrzemyslawWisniewski您必须执行以下操作:CreateCompatibleDC(hdc)以创建与控件项的设备上下文兼容的设备上下文。我也尝试过,并生成了:void ccustomcombox::DrawItem(LPDRAWITEMSTRUCT LPDRAWITEMSTRUCT){HDC HDC=LPDRAWITEMSTRUCT->HDC;RECT r=LPDRAWITEMSTRUCT->rcItem;HDC memory=::CreateCompatibleDC(HDC);LineTo(内存,10,10);BitBlt(hdc,0,0,20,20,内存,0,0,srcopy);};但还是不管用,谢谢,也许这就是我要找的。如果我的申请有问题,我会在这里发布。谢谢man@PrzemyslawWisniewski很乐意帮忙!如果你觉得答案有帮助的话,请记住接受。好的,谢谢。我还有一个关于上一个问题的问题。我得到了类似void ccustomcombox::DrawItem(LPDRAWITEMSTRUCT LPDRAWITEMSTRUCT){HDC memory;LineTo(memory,10,10);…HDC HDC=::GetDC(LPDRAWITEMSTRUCT->hwnItem);…BitBlt(HDC,0,0,20,20,memory,0,0,SRCCOPY);}它不会将内存复制到HDC,有人知道为什么吗?Przemek@PrzemyslawWisniewski您必须执行以下操作:CreateCompatibleDC(hdc)以创建与控件项的设备上下文兼容的设备上下文。我也尝试过,并生成了:void ccustomcombox::DrawItem(LPDRAWITEMSTRUCT LPDRAWITEMSTRUCT){HDC HDC=LPDRAWITEMSTRUCT->HDC;RECT r=LPDRAWITEMSTRUCT->rcItem;HDC memory=::CreateCompatibleDC(HDC);LineTo(内存,10,10);BitBlt(hdc,0,0,20,20,内存,0,0,srcopy);};但是+1仍然不起作用,因为您还提到了您要完成的任务(自己绘制combobox的项目)不知道MFC方式,但在普通Win32中,您使用CB_GETCOMBOBOXINFO消息获取列表窗口和编辑控件的句柄。是的,使用owner draw手动绘制项目。+1因为您还提到了您要完成的任务(您自己绘制组合框的项目)不知道MFC方式,但在普通Win32中,您使用CB_GETCOMBOBOXINFO消息获取列表窗口和编辑控件的句柄。是的,使用owner draw手动绘制项目。