Bonjour, je cherche à créer un controle de type Edit en utilisant une
classe. Le probleme, c'est que je souhaite redéfinir la procedure
callback du controle...
J'ai ecrit cela, mais wpOrigEditProc =
(WNDPROC/SetWindowLong(hEdit,
GWL_WNDPROC, (LONG)EditProc); me change le controle en ascenseur
bizarre...
//edit.h
#ifndef CEDIT_H_
#define CEDIT_H_
#include <windows.h>
class CEdit
{
private:
HWND hEdit;
static LRESULT APIENTRY EditProc(HWND, UINT, WPARAM, LPARAM);
LRESULT Ret(HWND, UINT, WPARAM, LPARAM);
CEdit* c;
public:
WNDPROC wpOrigEditProc;
CEdit(HWND,HINSTANCE);
~CEdit();
};
#endif
//edit.cpp
#include "edit.h"
CEdit::CEdit(HWND hwnd,HINSTANCE hinst=0)
{
hEdit =CreateWindow("edit", "Texte non modifiable.\r\nVous ne pouvez \
que le lire.\r\nMais il garde la couleur du fond d'un contrôle d'édition actif.",
WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL,
50, 50, 150, 150, hwnd, NULL, hinst, this);
/*wpOrigEditProc = (WNDPROC)*/SetWindowLong(hEdit,
GWL_WNDPROC, (LONG)EditProc);
c=this;
}
CEdit::~CEdit()
{
SetWindowLong(hEdit, GWL_WNDPROC, (LONG)wpOrigEditProc);
}
LRESULT CEdit::Ret(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
LRESULT APIENTRY CEdit::EditProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg==WM_CREATE)
MessageBox(0,"a","e",0);
CEdit * pFen = (CEdit*) GetWindowLong(hwnd, GWL_USERDATA);
if(!pFen)
return DefWindowProc(hwnd, msg, wParam, lParam);
return pFen->Ret(hwnd, msg, wParam, lParam);
}
J'ai surement fait n'importe quoi, si quelqu'un pourrait m'éclairer sur la chose, que je puisse le programmer proprement...
Merci