为什么列表框不显示使用 Visual C++ 6 的元素?
Why is Listboxes not displaying elements using Visual C++ 6?
所以,我遇到了一个列表框问题,我希望它显示的条目在 Visual C++ 6 中没有显示。
代码如下
switch (m) {
case WM_INITDIALOG: //To initiate the dialog box
{
HICON hicon = (HICON__ *)LoadImageW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(IDI_ICONMAIN), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE);
SendMessageW(h, WM_SETICON, ICON_BIG, (long)hicon);
RECT Rect;
::GetWindowRect(h, &Rect);
::SetWindowPos(h, HWND_TOPMOST, (::GetSystemMetrics(SM_CXSCREEN)/2 - ((Rect.right - Rect.left)/2)), (::GetSystemMetrics(SM_CYSCREEN)/2 - ((Rect.bottom - Rect.top)/2)), (Rect.right - Rect.left), (Rect.bottom - Rect.top), SWP_SHOWWINDOW);
//Place items in listbox.
const std::string StringArray[] = {"10", "20", "30", "40", "50", "60", "70"};
SendMessage(h, LB_ADDSTRING, DROPDOWN1, (LPARAM)StringArray);
return TRUE;
}
C++ 不是 C#。原始数组不是 类 并且没有方法。
使用std::vector< std::string >
.
但在那之前,a good C++ book 学习 C++。
ETA 由于您在尝试调用 StringArray
变量上不存在的 .Length
以在for 循环...
LB_ADDSTRING 消息的 MSDN 文档中的哪些内容使您认为它会接受 std::string
? std::string
不是以 NULL 结尾的字符数组。您为什么认为可以将 std::string
的数组转换为 LPARAM
?
你想要的更像是:(我没有编译这段代码。)
typedef std::vector< std::string > string_vec;
const string_vec StringArray{"10", "20", "30", "40", "50", "60", "70"};
for( const auto & s : StringArray )
{
SendMessage(h, LB_ADDSTRING, DROPDOWN1, (LPARAM)( s.c_str() ) );
}
N.B。这是现代 C++,不是古老的,过时的 VC++ 6.
所以,我遇到了一个列表框问题,我希望它显示的条目在 Visual C++ 6 中没有显示。
代码如下
switch (m) {
case WM_INITDIALOG: //To initiate the dialog box
{
HICON hicon = (HICON__ *)LoadImageW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(IDI_ICONMAIN), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE);
SendMessageW(h, WM_SETICON, ICON_BIG, (long)hicon);
RECT Rect;
::GetWindowRect(h, &Rect);
::SetWindowPos(h, HWND_TOPMOST, (::GetSystemMetrics(SM_CXSCREEN)/2 - ((Rect.right - Rect.left)/2)), (::GetSystemMetrics(SM_CYSCREEN)/2 - ((Rect.bottom - Rect.top)/2)), (Rect.right - Rect.left), (Rect.bottom - Rect.top), SWP_SHOWWINDOW);
//Place items in listbox.
const std::string StringArray[] = {"10", "20", "30", "40", "50", "60", "70"};
SendMessage(h, LB_ADDSTRING, DROPDOWN1, (LPARAM)StringArray);
return TRUE;
}
C++ 不是 C#。原始数组不是 类 并且没有方法。
使用std::vector< std::string >
.
但在那之前,a good C++ book 学习 C++。
ETA 由于您在尝试调用 StringArray
变量上不存在的 .Length
以在for 循环...
LB_ADDSTRING 消息的 MSDN 文档中的哪些内容使您认为它会接受 std::string
? std::string
不是以 NULL 结尾的字符数组。您为什么认为可以将 std::string
的数组转换为 LPARAM
?
你想要的更像是:(我没有编译这段代码。)
typedef std::vector< std::string > string_vec;
const string_vec StringArray{"10", "20", "30", "40", "50", "60", "70"};
for( const auto & s : StringArray )
{
SendMessage(h, LB_ADDSTRING, DROPDOWN1, (LPARAM)( s.c_str() ) );
}
N.B。这是现代 C++,不是古老的,过时的 VC++ 6.