Pacchetto funzionalità MFC:implementazione CDialogEx

 C Programming >> Programmazione C >  >> Tags >> MFC
Pacchetto funzionalità MFC:implementazione CDialogEx

La versione beta di MFC Feature Pack (l'estensione di MFC 9 da Visual Studio 2008) contiene un'implementazione della classe di dialogo estesa, CDialogEx. Ciò che questo porta di nuovo, pubblicamente, è la possibilità di impostare lo sfondo della finestra di dialogo su un colore o un'immagine.

Un primo nuovo metodo permette di impostare un colore di sfondo.

void SetBackgroundColor(COLORREF color, BOOL bRepaint = TRUE);

Un secondo metodo di overload consente di impostare un'immagine sullo sfondo.

void SetBackgroundImage(
    HBITMAP hBitmap, 
    BackgroundLocation location = BACKGR_TILE, 
    BOOL bAutoDestroy = TRUE, 
    BOOL bRepaint = TRUE);

BOOL SetBackgroundImage(
    UINT uiBmpResId, 
    BackgroundLocation location = BACKGR_TILE, 
    BOOL bRepaint = TRUE);

Puoi usarlo in questo modo:

BOOL CDialogDemoDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// ...

	HBITMAP bmp = ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP_LOGO));
	SetBackgroundImage(bmp, BACKGR_TILE);

	return TRUE;
}

La cosa molto strana è che gli unici stili per l'immagine sono questi:

enum BackgroundLocation
{
	BACKGR_TILE,
	BACKGR_TOPLEFT,
	BACKGR_TOPRIGHT,
	BACKGR_BOTTOMLEFT,
	BACKGR_BOTTOMRIGHT,
};

Questa implementazione manca di due stili di base:Center e Stretch. Non capisco davvero perché non siano stati implementati. È molto più probabile che sia necessaria un'immagine centrata o allungata che sia allineata in basso a sinistra, ad esempio. Pertanto, non vedo quanto sia buona questa classe se devo sovrascrivere l'intero dipinto da solo se ho bisogno di quella funzionalità.

Ecco un'implementazione di una classe dialog che supporta quegli stili.