24. februar 2002 - 11:39Der er
14 kommentarer og 1 løsning
mfc - arv - typecasting
Jeg har lavet en mfc app (CBlankApp) som nedarver fra en screensaver skabelon (CScreenSaverApp) fundet her: http://www.naughter.com/freegui.html
men når jeg overrider OnPaint() kan jeg ikke få føgende linie til at virke: CPaintDC dc(this); fejlen er: cannot convert parameter 1 from 'class CBlankApp *const ' to 'class CWnd *'
Hvordan får jeg lavet "this" om til en CWnd ? (hvis det altså overhovedet kan lade sig gøre? - hvis ikke hvordan kan jeg så få fat i en CPaintDC ?)
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hvorfor vil du dog håndtere det grafiske fra app-delen? Rent designmæssigt er det ikke særligt pænt... Du burde nok gøre det i et view eller i det mindste i dit frame vindue, hvilket også vil løse dit problem!
Du får fejlen fordi din app ikke er en nedarving fra CWnd. Du forsøger at lave en implicit konvertering fra CBlanApp til CWnd, hvilket ikke er muligt. Overrider du istedet OnPaint i framen eller view'et, er problemet der ikke!
CBlankDlg::CBlankDlg(CWnd* pParent /*=NULL*/) : CScreenSaverWnd() { //{{AFX_DATA_INIT(CBlankDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT }
ok, så langt så godt, men udgangspunktet er stadig det samme. void CBlankDlg::OnPaint() { CPaintDC dc(this); dc.SetTextColor(RGB(255, 255, 255)); dc.SetBkMode(TRANSPARENT); dc.TextOut(0, 0, "Override virkede"); } overrider stadig ikke CScreenSaverWnd::OnPaint(WM_PAINT) ?
mange tak, det gør testning nemmere.. bare for en god ordens skyld, så var det først efter ændringerne du foreslog 16:50:06 at det virkede
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.