Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 为什么SetWindowPos不更改ComboBoxEx下拉列表高度?_Visual Studio 2010_Winapi_Combobox_Controls - Fatal编程技术网

Visual studio 2010 为什么SetWindowPos不更改ComboBoxEx下拉列表高度?

Visual studio 2010 为什么SetWindowPos不更改ComboBoxEx下拉列表高度?,visual-studio-2010,winapi,combobox,controls,Visual Studio 2010,Winapi,Combobox,Controls,我正在用图像测试ComboBoxEx控件。我使用过微软,没有任何大的变化。它可以工作,但是comboboxex下拉列表不显示列表!事实上,SetWindowPos函数不会改变ComboBoxEx下拉列表的高度! 我在Windows7SP1x64中使用VS2010sp1、已发布、win32和Common Control 6.0 pragma。完全显示下拉列表的唯一方法是将CreateWindowEx中的ComboboxEx高度更改为一个大值! 如何以编程方式更改ComboBox下拉列表 我想创建一

我正在用图像测试ComboBoxEx控件。我使用过微软,没有任何大的变化。它可以工作,但是comboboxex下拉列表不显示列表!事实上,SetWindowPos函数不会改变ComboBoxEx下拉列表的高度! 我在Windows7SP1x64中使用VS2010sp1、已发布、win32和Common Control 6.0 pragma。完全显示下拉列表的唯一方法是将CreateWindowEx中的ComboboxEx高度更改为一个大值! 如何以编程方式更改ComboBox下拉列表

我想创建一个组合框,同时显示文本和图像。我准确地使用了以下代码:

HWND *CreateComboBoxEX(HWND hwndParent)
{
    HWND hwnd;
    INITCOMMONCONTROLSEX icex;

    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_USEREX_CLASSES;

    InitCommonControlsEx(&icex);

    hwnd = CreateWindowEx(0, WC_COMBOBOXEX, L"", 
    WS_BORDER | WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 0, 0, 200, 40,
    hwndParent, (HMENU)NULL, GetModuleHandle(0), NULL);
    if (hwnd == NULL)
        return(NULL);
    return(hwnd);
}

BOOL WINAPI AddItems(HWND hwndCB)
{

//  Declare and init locals.
COMBOBOXEXITEM cbei;
int iCnt;


typedef struct {
    int iImage;
    int iSelectedImage;
    int iIndent;
    LPTSTR pszText;
} ITEMINFO, *PITEMINFO;

ITEMINFO IInf[ ] = {
    { 0, 3,  0, L"first"}, 
    { 1, 4,  1, L"second"},
    { 2, 5,  2, L"third"},
    { 0, 3,  0, L"fourth"},
    { 1, 4,  1, L"fifth"},
    { 2, 5,  2, L"sixth"},
    { 0, 3,  0, L"seventh"},
    { 1, 4,  1, L"eighth"},
    { 2, 5,  2, L"ninth"},
    { 0, 3,  0, L"tenth"},
    { 1, 4,  1, L"eleventh"},
    { 2, 5,  2, L"twelfth"},
    { 0, 3,  0, L"thirteenth"},
    { 1, 4,  1, L"fourteenth"},
    { 2, 5,  2, L"fifteenth"}
};

// Set the mask common to all items.
cbei.mask = CBEIF_TEXT | CBEIF_INDENT |
            CBEIF_IMAGE| CBEIF_SELECTEDIMAGE;

for(iCnt=0;iCnt<MAX_ITEMS;iCnt++){
    // Initialize the COMBOBOXEXITEM struct.
    cbei.iItem          = iCnt;
    cbei.pszText        = IInf[iCnt].pszText;
    cbei.cchTextMax     = sizeof(IInf[iCnt].pszText);
    cbei.iImage         = IInf[iCnt].iImage;
    cbei.iSelectedImage = IInf[iCnt].iSelectedImage;
    cbei.iIndent        = IInf[iCnt].iIndent;


    // Tell the ComboBoxEx to add the item. Return FALSE if 
    // this fails.
    if(SendMessage(hwndCB,CBEM_INSERTITEM,0,(LPARAM)&cbei) == -1)
        return FALSE;
}
// Assign the existing image list to the ComboBoxEx control 
// and return TRUE. 
// g_himl is the handle to the existing image list
SendMessage(hwndCB,CBEM_SETIMAGELIST,0,(LPARAM)g_himl);

// Set size of control to make sure it's displayed correctly now
// that the image list is set.
SetWindowPos(hwndCB,NULL,20,20,250,120,SWP_NOACTIVATE);

return TRUE; 
}
程序显示文本和图像的组合框,当我点击它时,它不会显示下拉列表。我想完整地查看下拉列表。 我查过了。它可以改变X的宽度,但不能改变高度!
我糊涂了!有什么问题吗?

ComboBox X有一个子窗口,它是一个常规的ComboBox,有些消息无法正确传递。我认为这也取决于窗口版本

创建控件时应设置高度。同时移除指针

HWND CreateComboBoxEX(HWND hwndParent)
{
    INITCOMMONCONTROLSEX icex;
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_USEREX_CLASSES;
    InitCommonControlsEx(&icex);

    //*** put the correct height in here: *** 
    HWND hwnd = CreateWindowEx(0, WC_COMBOBOXEX, L"", 
            WS_BORDER | WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 0, 0, 200, 120, 
            hwndParent, (HMENU)NULL, GetModuleHandle(0), NULL);

    return(hwnd);
}
以后可以使用
SetWindowPos
更改X/Y位置和宽度

另一种方法:

使用
SetWindowPos
更改ComboBox X的X/Y位置和宽度。然后调整ComboBoxEx的子对象的大小以设置正确的高度

//height will have no effect here
SetWindowPos(hwndCB, NULL, 20, 20, 250, 120, SWP_NOACTIVATE);

HWND child = (HWND)SendMessage(hwndCB, CBEM_GETCOMBOCONTROL, 0, 0);
if (child)
{
    //Resize using the same width, but different height. And don't move. 
    SetWindowPos(child, NULL, 0, 0, 250, 120, SWP_NOMOVE);
}

ComboBoxEx有一个子窗口,它是一个常规的ComboBox,有些消息无法正确传递。我认为这也取决于窗口版本

创建控件时应设置高度。同时移除指针

HWND CreateComboBoxEX(HWND hwndParent)
{
    INITCOMMONCONTROLSEX icex;
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_USEREX_CLASSES;
    InitCommonControlsEx(&icex);

    //*** put the correct height in here: *** 
    HWND hwnd = CreateWindowEx(0, WC_COMBOBOXEX, L"", 
            WS_BORDER | WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 0, 0, 200, 120, 
            hwndParent, (HMENU)NULL, GetModuleHandle(0), NULL);

    return(hwnd);
}
以后可以使用
SetWindowPos
更改X/Y位置和宽度

另一种方法:

使用
SetWindowPos
更改ComboBox X的X/Y位置和宽度。然后调整ComboBoxEx的子对象的大小以设置正确的高度

//height will have no effect here
SetWindowPos(hwndCB, NULL, 20, 20, 250, 120, SWP_NOACTIVATE);

HWND child = (HWND)SendMessage(hwndCB, CBEM_GETCOMBOCONTROL, 0, 0);
if (child)
{
    //Resize using the same width, but different height. And don't move. 
    SetWindowPos(child, NULL, 0, 0, 250, 120, SWP_NOMOVE);
}

ComboBoxEx有一个子窗口,它是一个常规的ComboBox,有些消息无法正确传递。我认为这也取决于窗口版本

创建控件时应设置高度。同时移除指针

HWND CreateComboBoxEX(HWND hwndParent)
{
    INITCOMMONCONTROLSEX icex;
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_USEREX_CLASSES;
    InitCommonControlsEx(&icex);

    //*** put the correct height in here: *** 
    HWND hwnd = CreateWindowEx(0, WC_COMBOBOXEX, L"", 
            WS_BORDER | WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 0, 0, 200, 120, 
            hwndParent, (HMENU)NULL, GetModuleHandle(0), NULL);

    return(hwnd);
}
以后可以使用
SetWindowPos
更改X/Y位置和宽度

另一种方法:

使用
SetWindowPos
更改ComboBox X的X/Y位置和宽度。然后调整ComboBoxEx的子对象的大小以设置正确的高度

//height will have no effect here
SetWindowPos(hwndCB, NULL, 20, 20, 250, 120, SWP_NOACTIVATE);

HWND child = (HWND)SendMessage(hwndCB, CBEM_GETCOMBOCONTROL, 0, 0);
if (child)
{
    //Resize using the same width, but different height. And don't move. 
    SetWindowPos(child, NULL, 0, 0, 250, 120, SWP_NOMOVE);
}

ComboBoxEx有一个子窗口,它是一个常规的ComboBox,有些消息无法正确传递。我认为这也取决于窗口版本

创建控件时应设置高度。同时移除指针

HWND CreateComboBoxEX(HWND hwndParent)
{
    INITCOMMONCONTROLSEX icex;
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_USEREX_CLASSES;
    InitCommonControlsEx(&icex);

    //*** put the correct height in here: *** 
    HWND hwnd = CreateWindowEx(0, WC_COMBOBOXEX, L"", 
            WS_BORDER | WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST, 0, 0, 200, 120, 
            hwndParent, (HMENU)NULL, GetModuleHandle(0), NULL);

    return(hwnd);
}
以后可以使用
SetWindowPos
更改X/Y位置和宽度

另一种方法:

使用
SetWindowPos
更改ComboBox X的X/Y位置和宽度。然后调整ComboBoxEx的子对象的大小以设置正确的高度

//height will have no effect here
SetWindowPos(hwndCB, NULL, 20, 20, 250, 120, SWP_NOACTIVATE);

HWND child = (HWND)SendMessage(hwndCB, CBEM_GETCOMBOCONTROL, 0, 0);
if (child)
{
    //Resize using the same width, but different height. And don't move. 
    SetWindowPos(child, NULL, 0, 0, 250, 120, SWP_NOMOVE);
}

不完全理解这个问题。请发布一些代码来说明你正在尝试做什么,哪些不适合你。包含示例代码。如果没有看到您的代码,就不可能猜测您的错误。请提供一个。您是否正在调用
DefWindowProc
以获取未明确处理的窗口消息?你会接受应该打开下拉列表的消息吗?“mcve”的“c”部分意味着可以按原样运行以演示问题。另外:
CreateComboBoxEX
没有返回
HWND
它返回的是
*HWND
。在这种情况下,这可能无关紧要,但你应该小心类型。不要完全理解这个问题。请发布一些代码来说明你正在尝试做什么,什么不适合你。包含示例代码。如果没有看到您的代码,就不可能猜测您的错误。请提供一个。您是否正在调用
DefWindowProc
以获取未明确处理的窗口消息?你会接受应该打开下拉列表的消息吗?“mcve”的“c”部分意味着可以按原样运行以演示问题。另外:
CreateComboBoxEX
没有返回
HWND
它返回的是
*HWND
。在这种情况下,这可能无关紧要,但你应该小心类型。不要完全理解这个问题。请发布一些代码来说明你正在尝试做什么,什么不适合你。包含示例代码。如果没有看到您的代码,就不可能猜测您的错误。请提供一个。您是否正在调用
DefWindowProc
以获取未明确处理的窗口消息?你会接受应该打开下拉列表的消息吗?“mcve”的“c”部分意味着可以按原样运行以演示问题。另外:
CreateComboBoxEX
没有返回
HWND
它返回的是
*HWND
。在这种情况下,这可能无关紧要,但你应该小心类型。不要完全理解这个问题。请发布一些代码来说明你正在尝试做什么,什么不适合你。包含示例代码。如果没有看到您的代码,就不可能猜测您的错误。请提供一个。您是否正在调用
DefWindowProc
以获取未明确处理的窗口消息?你会接受应该打开下拉列表的消息吗?“mcve”的“c”部分意味着可以按原样运行以演示问题。另外:
CreateComboBoxEX
没有返回
HWND
它返回的是
*HWND
。在这种情况下,这可能无关紧要,但您应该注意类型。