Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: [VC++6] MsgProc ei kelpaa parametriksi

jcd3nton [13.11.2004 12:36:37]

#

Mulla on funktio

int gMain::pvfCreateWindow(int Width, int Height, HINSTANCE hInst)

jossa on rivi

this->wc.lpfnWndProc   = (WNDPROC)this->MsgProc;

. wc on WNDCLASSEX. Tuo ei jostain syystä toimi tuo rivi, tulee tällainen virhe:

error C2440: 'type cast' : cannot convert from '' to 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'

Ja MsgProc:n esittely on tällainen:

LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );

Mikä neuvoksi?

Markus [13.11.2004 12:47:38]

#

Et voi käyttää jäsenfunktiota (metodia) ikkunan viestinkäsittelijänä.

Lue: http://www.rpi.edu/~pudeyo/articles/wndproc/

Masfonos [16.11.2004 03:50:57]

#

Joskus kauan sitten oli sama ongelma, ja tämän ratkaisun löysin. Toiminut minulla jo pitemmän aikaa.

Headerissa:

class gMain
{
public:
   int pvfCreateWindow(...);

private:
   static LRESULT WINAPI MsgProc(HWND hWnd, ...);

pvfCreateWindow funktiossa:

int gMain::pvfCreateWindow(...)
{
   ...
   wc.lpfnWndProc   = MsgProc;
   ...
}

thefox [18.11.2004 14:57:10]

#

Tuo Masfonosin ratkaisu on mainittu tuolla Markuksen antamalla saitilla kohdassa "Simple Fix for Obvious Solution". Tuo ei kuitenkaan ole sopiva kaikille tapauksille.

Yksi hyvä ratkaisu löytyy kohdasta "Per-Window Data". Jos tekee esim. säikeitä käyttäviä ohjelmia (jolloin tulee sama ongelma eteen), homma hoituu vielä tuotakin helpommin koska CreateThreadille voidaan antaa suoraan parametriksi käyttäjän määrittelemä arvo jonka Windows sitten työntää thread-callbackille.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta