2016-02-11 2 views
-3

Donc, j'ai un problème Listbox où les entrées que je veux montrer ne sont pas affichées dans Visual C++ 6.Pourquoi Listbox n'affiche pas les éléments utilisant Visual C++ 6?

Le code est le suivant.

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; 
    } 
+0

Qu'est-ce que _C++ 6_ réellement? –

+0

Vous envoyez le message à la mauvaise fenêtre. Utilisez des noms de variables descriptifs, "h" suce. –

+0

@ πάνταῥεῖ Un rapide google me fait penser qu'il veut dire Visual C++ 6, mais nous ne pouvons pas être certains. –

Répondre

0

C++ n'est pas C#. Les tableaux bruts ne sont pas des classes et n'ont pas de méthodes.

Utilisez std::vector<std::string>.

Mais avant cela, obtenez a good C++ book et apprenez C++.

ETA Depuis que vous avez pris vos modifications lorsque vous essayez d'appeler un sur la variable StringArray non pour traverser .Length existant dans une boucle for ...

Qu'est-ce que dans la documentation MSDN pour la LB_ADDSTRING message vous fait penser qu'il acceptera un std::string? std::string n'est pas un tableau de caractères terminés NULL. Pourquoi penseriez-vous que vous pourriez lancer un tableau de std::string à un LPARAM?

Ce que vous voulez est plus comme: (. Je ne l'ai pas compilé ce code)

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())); 
} 

Range-based for

N.B. c'est du C++ moderne, pas du VC++ 6 ancien et obsolète.