Poblème avec un pointeur... [Résolu]

xxDarkSidexx 2 Messages postés mercredi 12 décembre 2007Date d'inscription 15 avril 2008 Dernière intervention - 3 avril 2008 à 22:33 - Dernière réponse : SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention
- 3 avril 2008 à 22:48
Bonsoir,

J'essaye tant bien que mal de mettre en place une ListView...Le seul problème est malheureusement cette ligne de code...je n'arrive pas a savoir d'ou vient l'erreur...

wpOrigEditProc = (PVOID)SetWindowLong(hEdit, GWL_WNDPROC, (LONG)EditProc);

 invalid conversion from `void*' to `LRESULT (*)(HWND__*, UINT, WPARAM, LPARAM)'

Tout conseils sont les bien-venus...

Voici le code complet.....


 


#include <windows.h>
#include <commctrl.h>


#ifdef STRICT
static  WNDPROC wpOrigEditProc ;
#else
  FARPROC wpOrigEditProc ;
#endif


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


LRESULT APIENTRY EditProc(HWND, UINT, WPARAM, LPARAM);


HINSTANCE hinst;


int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
                                                  LPSTR lpCmdLine, int nCmdShow)
{
    HWND hwnd;
    MSG msg;
    WNDCLASS wc;


    hinst = hinstance;


    wc.style = 0 ;
    wc.lpfnWndProc = MainWndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hinstance;
    wc.hIcon = NULL;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = NULL;
    wc.lpszMenuName =  NULL;
    wc.lpszClassName = "MaWinClass";


    if(!RegisterClass(&wc)) return FALSE;


    hwnd = CreateWindow("MaWinClass", "List View", WS_OVERLAPPEDWINDOW,
                                   CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
                                                   NULL, NULL, hinstance, NULL);
    if (!hwnd)  return FALSE;


    ShowWindow(hwnd, nCmdShow);


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


/******************************************************************************/


LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static HWND hEdit;
    static HWND hListView;


    switch (uMsg)
    {
        case WM_CREATE:
           {
            LV_ITEM lvi;
            HINSTANCE dllhinst;
            HICON hIcon;
            HIMAGELIST himgList;
            InitCommonControls();
            himgList = ImageList_Create(GetSystemMetrics(SM_CXICON),
                               GetSystemMetrics(SM_CYICON), ILC_COLOR32 , 3, 3);
            ImageList_SetBkColor(himgList, GetSysColor(COLOR_WINDOW));
            dllhinst = LoadLibrary("shell32.dll");
            hIcon = LoadIcon(dllhinst, MAKEINTRESOURCE(4));
            ImageList_AddIcon(himgList, hIcon);
            hIcon = LoadIcon(dllhinst, MAKEINTRESOURCE(6));
            ImageList_AddIcon(himgList, hIcon);
            hIcon = LoadIcon(dllhinst, MAKEINTRESOURCE(12));
            ImageList_AddIcon(himgList, hIcon);
            FreeLibrary(dllhinst);


            ZeroMemory(&lvi, sizeof(LV_ITEM));
            lvi.mask = LVIF_TEXT | LVIF_IMAGE ;
            hListView =CreateWindowEx(WS_EX_CLIENTEDGE , WC_LISTVIEW, "",
                  WS_CHILD | WS_VISIBLE , 0, 0, 0, 0, hwnd, NULL, hinst, NULL);


            hEdit =CreateWindowEx(WS_EX_CLIENTEDGE , "edit",
                                       "\r\nTest de la ListView.",
              WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL,
                                           0, 0, 0, 0, hwnd, NULL, hinst, NULL);
            SetClassLong(hEdit, GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_ARROW));
            wpOrigEditProc = (PVOID)SetWindowLong(hEdit,
                                                   GWL_WNDPROC, (LONG)EditProc);


            ListView_SetImageList(hListView, himgList, LVSIL_NORMAL);
            lvi.pszText = "Option 3";
            lvi.iImage = 0;
            ListView_InsertItem(hListView, &lvi);
            lvi.pszText = "Option 2";
            lvi.iImage = 1;
            ListView_InsertItem(hListView, &lvi);
            lvi.pszText = "Option 1";
            lvi.iImage = 2;
            ListView_InsertItem(hListView, &lvi);
            return 0;
           }


        case WM_NOTIFY:
           {
             LPNM_LISTVIEW pnlv = (LPNM_LISTVIEW)lParam;
             if(pnlv->hdr.code == LVN_ITEMCHANGED)
              {
                if(pnlv->iItem == 0)
                   SetWindowText(hEdit,
                         "\r\nBien !\r\n\r\nVous avez sélectionné l'option 1.");
                if(pnlv->iItem == 1)
                   SetWindowText(hEdit,
                        "\r\nBravo !\r\n\r\nVous avez sélectionné l'option 2.");
                if(pnlv->iItem == 2)
                   SetWindowText(hEdit,
                      "\r\nParfait !\r\n\r\nVous avez sélectionné l'option 3.");
              }
             return 0;
           }
        case WM_SIZE:
            MoveWindow(hEdit, 100, 0, LOWORD(lParam)-100, HIWORD(lParam), TRUE);
            MoveWindow(hListView, 0, 0, 100, HIWORD(lParam), TRUE);
            return 0;


        case WM_DESTROY:
            SetWindowLong(hEdit, GWL_WNDPROC,(LONG) wpOrigEditProc);
            PostQuitMessage(0);
            return 0;


        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
}


/******************************************************************************/


LRESULT APIENTRY EditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{   if (uMsg WM_SETFOCUS || uMsg WM_CONTEXTMENU || uMsg == WM_CHAR ||
                                                             uMsg == WM_KEYDOWN)
                                                                       return 0;
   return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam);
}
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 3 avril 2008 à 22:46
3
Merci
Bah c'est simple. wpOrigEditProc est un pointeur de fonction FARPROC (si STRICT n'est pas définie) mais tu essais de le faire passer pour un pointeur void.

Essais ceci:

wpOrigEditProc = (FARPROC)SetWindowLong(hEdit, GWL_WNDPROC, (LONG)EditProc);

C++ (@++)<!--

Merci SAKingdom 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de SAKingdom
Meilleure réponse
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 3 avril 2008 à 22:48
3
Merci
Hmm d'après le message d'erreur je dirais plus qu'il s'agit d'un pointeur sur fonction WNDPROC.

Essais

wpOrigEditProc = (WNDPROC)SetWindowLong(hEdit, GWL_WNDPROC, (LONG)EditProc);

si l'autre ne fonctionne pas plus.

C++ (@++)<!--

Merci SAKingdom 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de SAKingdom

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.