Probleme listbox LBS_OWNERDRAWFIXED

fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008 - 6 juin 2007 à 17:22
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008 - 16 juil. 2007 à 15:44
Bonjour,
Je galere depuis plusieurs jours pour essayer de mettre des couleurs de fond a certaines lignes de ma listbox...
J'ai trouvé quelques exemples, utilisant notamment LB_INSERTSTRING, LB_SETITEMDATA et WM_DRAWITEM pour le faire
Mais d'apres les codes, ma listbox doit aovir l'attribut LBS_OWNERDRAWFIXED pour que WS_DRAWITEM soit bien executé (sinon je crois qu'il ne va jamais dedans)
Cependant, LBS_OWNERDRAWFIXED n'est pas reconnu sous mon evc++!!!!
Quelqu'un a une idée pourquoi?
Je fais du C en Win32 pour ceux qui n'avait pas compris ^^
hTab[i] = CreateWindowEx(  WS_EX_CLIENTEDGE,  TEXT("LISTBOX"),   NULL,
  WS_VISIBLE|WS_CHILD|LBS_NOTIFY|WS_VSCROLL|WS_TABSTOP|WS_BORDER|LBS_OWNERDRAWFIXED |LBS_USETABSTOPS,...);

error C2065: 'LBS_OWNERDRAWFIXED' : undeclared identifier

Help il faut que j'arrive a mettre ces foutues couleurs!

38 réponses

fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
11 juin 2007 à 15:57
Toujours rien
pour tester J'ai donc  créé un nouveau projet tres basique ne contenant q'une listbox, composée de 2 items...
Voici le code complet qui est donc court, mais qui ne colore pas les lignes comme souhaité...
J'ai hate de savoir ce que t'en pense, cette fois je crois avoir respecté tout ce que tu m'a di. Et pour assurer le coup, je gère le WM_DRAWITEM pour la fenetre principale, mais également en sous-classement :

#include "stdafx.h"
#include "stdlib.h"



#define ID_EDIT   102




HWND hWnd;
HWND hBtn;
LPDRAWITEMSTRUCT info;
HINSTANCE hinst;
WNDPROC ListBoxProcSousClassement;
int iCurrItem;




HBRUSH fondRouge = CreateSolidBrush(RGB(255,0,0));
HBRUSH fondBleu = CreateSolidBrush(RGB(0,0,255));
HBRUSH fondVert = CreateSolidBrush(RGB(0,255,0));
COLORREF rouge = RGB(255,0,0);
COLORREF bleu = RGB(0,0,255);
COLORREF vert = RGB(0,255,0);




WCHAR *GetText(HWND hWnd)
{
  WCHAR *Text;
  unsigned int TextLen = 0;
  TextLen = GetWindowTextLength(hWnd);
  if(TextLen){
    Text = new WCHAR[(TextLen + 2)];
    TextLen = GetWindowText(hWnd, Text, (TextLen + 1));
  }
  return Text;
}




LRESULT CALLBACK ListBoxProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
 PAINTSTRUCT ps;
 switch(Msg)
 {
  case WM_DRAWITEM:
  {
   RECT rt2;
   HDC hdc2; 
   if(iCurrItem==0)
   {
  /*  info = (LPDRAWITEMSTRUCT) lParam;
    SetTextColor(info->hDC, bleu);
    SetBkMode(info->hDC, TRANSPARENT);
    FillRect(info->hDC, &info->rcItem, fondRouge);
    DrawText(info->hDC, TEXT("ligneRouge"), 10, &info->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);   
  */
    hdc2= BeginPaint(hwnd, &ps);
    GetClientRect(hwnd, &rt2);
    SetTextColor(hdc2, bleu);
    SetBkMode(hdc2, TRANSPARENT);
    FillRect(hdc2, &rt2, fondRouge);
    DrawText(hdc2, TEXT("ligneRouge"), 10, &rt2, DT_CENTER);
       
    break;
   }
   if(iCurrItem==1)
   {
  /*  info = (LPDRAWITEMSTRUCT) lParam;
    SetTextColor(info->hDC, rouge);
    SetBkMode(info->hDC, TRANSPARENT);
    FillRect(info->hDC, &info->rcItem, fondBleu);
    DrawText(info->hDC, TEXT("ligneBleue"), 10, &info->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);   
  */
    hdc2= BeginPaint(hwnd, &ps);
    GetClientRect(hwnd, &rt2);
    SetTextColor(hdc2, rouge);
    SetBkMode(hdc2, TRANSPARENT);
    FillRect(hdc2, &rt2, fondBleu);
    DrawText(hdc2, TEXT("ligneBleue"), 10, &rt2, DT_CENTER);
      
    break;
   }
  }
 }
 //retour la fonction de gestion des édits
 return CallWindowProc(ListBoxProcSousClassement, hwnd, Msg, wParam, lParam);  
}




LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 HDC hdc;
 PAINTSTRUCT ps;




 switch (message)
 {
  case WM_CREATE:
   hBtn = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("LISTBOX"), NULL, WS_VISIBLE|WS_CHILD|LBS_NOTIFY|WS_VSCROLL|ES_AUTOVSCROLL|BS_OWNERDRAW,
    0, 40, 240, 100, hWnd, HMENU(ID_EDIT), hinst, NULL);




   iCurrItem=SendMessage(GetDlgItem(hWnd, ID_EDIT), LB_ADDSTRING, 0, (LPARAM)TEXT("Ligne 1a"));
   SendMessage (GetDlgItem(hWnd, ID_EDIT), LB_SETITEMDATA,(WPARAM) iCurrItem, (LPARAM) 0);
   iCurrItem=SendMessage(GetDlgItem(hWnd, ID_EDIT), LB_ADDSTRING, 0, (LPARAM)TEXT("Ligne 2aa"));
   SendMessage (GetDlgItem(hWnd, ID_EDIT), LB_SETITEMDATA,(WPARAM) iCurrItem, (LPARAM) 1);
   
   ListBoxProcSousClassement = (WNDPROC)SetWindowLong(GetDlgItem(hWnd,ID_EDIT), GWL_WNDPROC,(LONG)ListBoxProc);
   
   if (!hBtn)
   { 
    return FALSE;
   }
   break;
  case WM_DRAWITEM:
  {
   RECT rt2;
   HDC hdc2; 
   if(iCurrItem==0)
   {
  /*  info = (LPDRAWITEMSTRUCT) lParam;
    SetTextColor(info->hDC, bleu);
    SetBkMode(info->hDC, TRANSPARENT);
    FillRect(info->hDC, &info->rcItem, fondRouge);
    DrawText(info->hDC, TEXT("ligneRouge"), 10, &info->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER); 
  */    
    hdc2= BeginPaint(hWnd, &ps);
    GetClientRect(hWnd, &rt2);
    SetTextColor(hdc2, bleu);
    SetBkMode(hdc2, TRANSPARENT);
    FillRect(hdc2, &rt2, fondRouge);
    DrawText(hdc2, TEXT("ligneRouge"), 10, &rt2, DT_CENTER);


    break;
   }
   if(iCurrItem==1)
   {
  /*  info = (LPDRAWITEMSTRUCT) lParam;
    SetTextColor(info->hDC, rouge);
    SetBkMode(info->hDC, TRANSPARENT);
    FillRect(info->hDC, &info->rcItem, fondBleu);
    DrawText(info->hDC, TEXT("ligneBleue"), 10, &info->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);   
  */
    hdc2= BeginPaint(hWnd, &ps);
    GetClientRect(hWnd, &rt2);
    SetTextColor(hdc2, rouge);
    SetBkMode(hdc2, TRANSPARENT);
    FillRect(hdc2, &rt2, fondBleu);
    DrawText(hdc2, TEXT("ligneBleue"), 10, &rt2, DT_CENTER);
     
    break;
   } 
  }
  case WM_CTLCOLORLISTBOX://Dessin du contrôle TAB -> passe bien ici
  {
   return (BOOL) fondVert;
  }
  case WM_PAINT:
   RECT rt;
   hdc = BeginPaint(hWnd, &ps);
   GetClientRect(hWnd, &rt);
   FillRect(hdc, &rt, (HBRUSH) (1));
   EndPaint(hWnd, &ps);
   break;
  case WM_DESTROY:
   DestroyWindow(hWnd);
   PostQuitMessage(0);
   break;
  default:
   return DefWindowProc(hWnd, message, wParam, lParam);
 }
 return 0;
}
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass){
 WNDCLASS wc;
 wc.style = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc = (WNDPROC) WndProc;
 wc.cbClsExtra = 0;
 wc.cbWndExtra = 0;
 wc.hInstance = hInstance;
 wc.hIcon = 0;// LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
 wc.hCursor = 0;
 wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
 wc.lpszMenuName = 0;
 wc.lpszClassName = szWindowClass;
 return RegisterClass(&wc);
}




int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){
 MSG msg;
 hinst=hInstance;


 MyRegisterClass(hInstance, TEXT("szWindowClass"));
 hWnd = CreateWindow(TEXT("szWindowClass"), TEXT("Exemple 4"), WS_VISIBLE,
 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
 if (!hWnd)
 { 
  return FALSE;
 }


 ShowWindow(hWnd, nCmdShow);
 UpdateWindow(hWnd);
 while (GetMessage(&msg, NULL, 0, 0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return msg.wParam;
}


J'essaie de gérer de deux maniere les drawitem, tu verra ce qui te semble le plus judicieux (peut etre aucun des deux ^^) mais je crois que ca ne passe pas dedans de toute facon...
Peut etre que les listbox ne permettent tout simplement pas cela..
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
11 juin 2007 à 20:35
salut , je vien de tombé sur sa :

http://msdn2.microsoft.com/en-us/library/ms671395.aspx#ownerdrawn_listbox

si j'ai le temps je verrais ce que je peut faire :)

mais mes quelques test déconnent :p
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
11 juin 2007 à 21:00
Je l'avais deja vu il me semble, et malheureusement...
The list box has the LBS_OWNERDRAW and LBS_HASSTRINGS styles...
mais bien essayé...
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
11 juin 2007 à 21:08
euh pour te préciser, c'est que LBS_OWNERDRAW est inconnu pour embedded visual C++ contrairement à BS_OWNERDRAW...
:)
mais je réessairai peut etre de modifier mon DRAWITEM..., meme si ca risque d'etre inutile...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
12 juin 2007 à 15:50
Bon je me suis repenché dessus, toujours rien, il me semble qu'on se rapproche du moment fatidique pour dire qu'on est impuissant :(
J'ai trouvé un seul endroit sur un forum où un anglais proposait d'envoyer par mail en 2003 une simulation de listbox ownerdraw... ^^
Dommage, comme quoi ya surement a creuser quelque part, mais avec mes petits moyens, je crois vraiment avoir essayé plein de truc... :s
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
12 juin 2007 à 15:53
Je te répondtait ce soir je serai chez moi je vais essayé de retouvé sa ^^.
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
12 juin 2007 à 16:12
Si ca peut t'etre utile, j'ai retrouvé ce que le gars a fait, mais c'est du C++... :s
en gros il est parti d'une CListCtrl  laquelle il n'a mis qu'une colonne...
Ca risque d'etre dur a adapter, m'enfin t'es meilleur que moi donc j'ai espoir :D
http://www.codeproject.com/ce/ccelistctrlex.asp
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
12 juin 2007 à 18:41
Salut: voila c bon je suis plus ou sa merdait mais la sa fonctionne, juste un petit bug de sélection du texte mais bon : le code est tel quel tu copie direct dans un fichier .c

#include <windows.h>
HWND Listbox;
HINSTANCE hinst;
char buffer [256];
RECT rect;

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    hinst = hThisInstance;
   
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}

/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    LPDRAWITEMSTRUCT lpDrawItem;
    switch (message)                  /* handle the messages */
    {
        //pour la gestion de l'affichage je gère 2 messages :
        case WM_DRAWITEM:
            
            
            //juste un petit BUG : la gestion de la sélection du text j'ai plus de temps je te laisse aprécié :p
            
            //on test quel est l'objet en dessin
             lpDrawItem = (LPDRAWITEMSTRUCT)lParam;
            
             if (lpDrawItem->hwndItem == Listbox)//si nous somme sur notre listbox
             {
               //on détermine si sélectionné ou non
               if (lpDrawItem->itemState & ODS_SELECTED)  //sélectionné
               {
                  FillRect(lpDrawItem->hDC, &lpDrawItem->rcItem, GetSysColorBrush(COLOR_HIGHLIGHT));
                  SetTextColor(lpDrawItem->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));
               }else //non sélectionné
               {
                  FillRect(lpDrawItem->hDC, &lpDrawItem->rcItem, GetSysColorBrush(COLOR_WINDOW));
                  SetTextColor(lpDrawItem->hDC, GetSysColor(COLOR_MENUTEXT));
               }
              
               //test pour gestion de la couleur
               if (lpDrawItem->itemID%2)
                 SetTextColor(lpDrawItem->hDC,RGB(255, 0, 0));
               else if (lpDrawItem->itemID%3)
                 SetTextColor(lpDrawItem->hDC,RGB(0, 255, 0));
               else
                 SetTextColor(lpDrawItem->hDC,RGB(0, 0, 255));

               //gestion des coordonnées
               rect.bottom=lpDrawItem->rcItem.bottom;
               rect.left=lpDrawItem->rcItem.left+2;
               rect.right=lpDrawItem->rcItem.right-2;
               rect.top=lpDrawItem->rcItem.top-2;
              
               //on récupère le texte non visible
               SendMessage(lpDrawItem->hwndItem, LB_GETTEXT,lpDrawItem->itemID, (LPARAM) buffer);
              
               //on écrit le texte
               DrawText(lpDrawItem->hDC,buffer, strlen(buffer),&rect, DT_VCENTER);

               return 0;
             }else
               return DefWindowProc (hwnd, message, wParam, lParam);
        break;      
        /*case WM_ERASEBKGND:
             return 0;//DefWindowProc (hwnd, message, wParam, lParam);
        break;*/

        case WM_CREATE:
             Listbox = CreateWindow("LISTBOX",0, WS_CHILD | WS_VISIBLE | LBS_HASSTRINGS | LBS_OWNERDRAWFIXED | WS_VSCROLL,10, 10, 200, 200, hwnd, NULL,hinst, NULL);
            
             //ajout d'items
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test1");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test2");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test3");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test4");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test1");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test2");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test3");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test4");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test1");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test2");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test3");
             SendMessage((HWND)Listbox,(UINT)LB_ADDSTRING,(WPARAM)0,(LPARAM)"test4");
        break;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

// voila bonne prog et bonne chance :p je filll ...........
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
12 juin 2007 à 19:27
Ok ben je peux pas ter tout de suite, je ferais ca demain matin...
Mais de visio vite fait , ton code me fait peur, enfin pas le code mais plutot le : LBS_OWNERDRAWFIXED
qui est justement inconnu sous embedded visual c++ et donc non supporté sous Windows CE... (d'ou le titre du post ^^)
Donc je n'ai pas tout regardé, peut etr qu'en fait avec ton code il sera reconnu, meme si je me permet d'en douter... Snif snif
Mais t'inquiete je ne fais pas de jugement troip hatif, je teste ça demain a la premiere heure, et si ca marche tu es un Dieu
Quoi qu'il en soit merci de ton aide et du temps conséquent que tu as dû passer a chercher a m'aider, je te tiens au courant dès que possible
++
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
13 juin 2007 à 08:55
J'ai copié cela dans un nouveau projet, et comme ce que je craignais... :s
D'abord j'ai dû insérer #include "stdafx.h", sinon j'ia une erreur "end of file found". D'ailleurs si tu sais pourquoi il faut mettre cet include, car il a l'air de faire références aux MFC, que je n'utilise pas... (dans mon projet actuel je l'ai aussi inséré aussi au départ, sinon il ne voulait pas non plus compilé... peut etre est-ce la source de mes erreurs? (Mon projet est un New->Project->WCE Pocket PC 2003 Application, je pense avoir fait tout ce qu'il faut...)
Sinon mes problemes viennent peut etre que mes fichiers sont des .cpp alors que je fais du C... Je cherche vraiment la petite bete qui fait que rien passe...^^



Compiling...
test2.cpp
...test2.cpp(20) : error C2731: 'WinMain' : function cannot be overloaded
        ...test2.cpp(15) : see declaration of 'WinMain'
...test2.cpp(25) : error C2065: 'WNDCLASSEX' : undeclared identifier
...test2.cpp(25) : error C2146: syntax error : missing ';' before identifier 'wincl'
...test2.cpp(25) : error C2065: 'wincl' : undeclared identifier
...test2.cpp(28) : error C2228: left of '.hInstance' must have class/struct/union type
...test2.cpp(29) : error C2228: left of '.lpszClassName' must have class/struct/union type
...test2.cpp(30) : error C2228: left of '.lpfnWndProc' must have class/struct/union type
...test2.cpp(31) : error C2228: left of '.style' must have class/struct/union type
...test2.cpp(32) : error C2228: left of '.cbSize' must have class/struct/union type
...test2.cpp(35) : error C2228: left of '.hIcon' must have class/struct/union type
...test2.cpp(35) : error C2065: 'IDI_APPLICATION' : undeclared identifier
...test2.cpp(36) : error C2228: left of '.hIconSm' must have class/struct/union type
...test2.cpp(37) : error C2228: left of '.hCursor' must have class/struct/union type
...test2.cpp(38) : error C2228: left of '.lpszMenuName' must have class/struct/union type
...test2.cpp(39) : error C2228: left of '.cbClsExtra' must have class/struct/union type
...test2.cpp(40) : error C2228: left of '.cbWndExtra' must have class/struct/union type
...test2.cpp(42) : error C2228: left of '.hbrBackground' must have class/struct/union type
...test2.cpp(45) : error C2065: 'RegisterClassEx' : undeclared identifier
...test2.cpp(53) : error C2065: 'WS_OVERLAPPEDWINDOW' : undeclared identifier
...test2.cpp(128) : error C2664: 'DrawTextW' : cannot convert parameter 2 from 'char [256]' to 'const unsigned short *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
...test2.cpp(139) : error C2065: 'LBS_OWNERDRAWFIXED' : undeclared identifier
...test2.cpp(139) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'char [8]' to 'const unsigned short *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.



test2.obj - 22 error(s), 0 warning(s)

Donc voila, que faire? sans doute est-on impuissant, j'espere ne pas trop te decevoir. ;)
Concernant ces erreurs, seule la premiere est "enlevable", en changeant le type LPSTR en LPTSTR...
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
13 juin 2007 à 09:17
Pour le stadafx c'est ma faute en fait, il faut créer un Empty project et c'est bon...
Mais ca n'enleve pas mes autres problemes, la programmation Pocket PC n'accepte tout de meme pas ce code... Snif snif
Merci quand meme Omnia
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
13 juin 2007 à 10:12
Salut , pour le stadafx c a cause du compilateur MS :p

pour les autres erreurs en fait c seulement le comptenu de la fonction d'appel qui t'intéresse pour la fenêtre c normal que tu es ces erreurs

sinon pour WS_OVERLAPPEDWINDOW  tu peux l'enlever

pour LBS_OWNERDRAWFIXED
 
#define LBS_OWNERDRAWFIXED 0x0010

je n'ai pa réinstaller tout el bazzard pour programmé en Pocket PC, g arrété passage a palm oblige même si c dépassé :p

voila+
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
13 juin 2007 à 12:11
Euh je veux pas te faire enrager, loin de là ;)
Mais le coup du define LBS_OWNERDRAWFIXED avait deja été envisagé avec racpp ( cf Page 1 de ce topic)
et donc ca ne marchait pas.
J'ai tout de meme réessayé avec ton code. J'ai bien la listbox mais evidemment pas de couleur, je crains le pire. Je crois qu'on peut dire adieu a la couleur sur item de listbox pour pocket pc...
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
13 juin 2007 à 12:34
Oui c vrais :p

sinon tu as essayé d'utilisé
ListView_RedrawItems pour forcé le redraw des items ??

sinon pour pocket pc j'ai vue quelques sources mais toutes était en clist ...

voila
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
13 juin 2007 à 12:42
sinon j'ai troué ici aussi:

http://msdn2.microsoft.com/en-US/library/ms959988.aspx

il disent d'ajouter Winuser.h  le define de LBS_OWNERDRAWFIXED est peut être différent sous Win ce
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
13 juin 2007 à 14:21
Salut omnia
Oui j'avais aussi essayé l'ajout de "winuser.h", mais il ne reconnait tout de meme pas LBS_OWNERDRAWFIXED ( a moins qu'il ne faille pas faire de include, je m'y prends peut etre mal... :s )
Quant au RedrawItem pour les listbox, les sources pouvant me renseigner disent que cela implique l'usage de MFC... donc je ne pense pas non plus
Jcommence a me résigner, même si c'est frustrant
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
16 juil. 2007 à 08:23
Salut , sa fait un moment que je ne t'avais pas répondu je suis tombé récement sur ce site :  j'espère que tu pourra y trouvé des infos

http://www.codeppc.com/evb/divers/divers019.htm

++
0
fredsor Messages postés 198 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 3 avril 2008
16 juil. 2007 à 15:44
Eh ben si je ne m'attendais plus du tout à une réponse sur ce topic!!
Merci omnia d'avoir pensé à moi!
En effet codeppc est LE site référence pour tout ce qui est programmation embarqué, surtout qu'ils ont une section réservée pour EVC++...
Mais ton lien ne m'est malheureusement pas très utile, car si en effet mon problème semble jouable en VB, ce n'est pas le cas en C...
J'avais laissé tombé depuis l'autre fois, mais ton message m'a fait refaire quelques recherches, toujours infructueuses ( le msdn de toute maniere semble catégorique sur ce point...)

Ciao, et merci encore
0
Rejoignez-nous