In a dialog box-based program, a task is to change the background of the edit box control. What should I do?
The implementation idea is as follows. When the child control is to be drawn, wm_ctlcolor will be sent to the parent class (the main window here)
Message. In the parent class (here is the main window), the response wm_ctlcolor is sent based on the message.
The specific code is as follows:
CBrush m_brush;
m_brush.CreateSolidBrush(RGB(0, 0, 255));
HBRUSH CMy112Dlg::OnCtlColor(CDC* pDC, C
* PDC, cwnd* pWnd, UINT nCtlColor)
{
Hbrush HBR = Cdialog::onctlcolor (PDC, PWnd, nCtlColor);
if ((nCtlColor = = Ctlcolor_edit) (Pwnd->getdlgctrlid () ==idc_edit))
{
Pdc->setbkmode (TRANSPARENT); //Set background transparent, so that when the output character is
is the so-called hollow word, instead of having a white background
Pdc->settextcolor (RGB (255,0,0)); //Change the color of the font
Return Hbrus
; bmp. loadBitmap (IDB_BITMAP2); m_brBk.CreatePatternBrush ( bmp); bmp. deleteObject (); return TRUE; // return TRUE unless you set the focus to a control} in the Open Class Wizard, find the WM_CTLCOLOR message, reload the corresponding function OnCtlColor (), add as follows: HBRUSH CTestDlg: OnCtlColor (CDC * pDC, CWnd * pWnd, UINT nCtlColor) {HBRUSH hbr = CDialog: OnCtlColor (pDC, pWnd, nCtlColor); if (pWnd = this) {return m_brBk;} return
First load an image with ID idb_bitmap2
In testdlg. h:
Cbrush m_brbk; // defined in public
In testdlg. cpp:
Add the following to the oninitdialog () initialization function:
Bool ctestdlg: oninitdialog ()
{
Cdialog: oninitdialog ();
Cbitmap BMP;
BMP. loadbitmap (idb_bitmap2 );
M_brbk.createpatternbrush ( BMP );
BMP. deleteobject ();
Return true; // return true unless you set the focus to a control
}
Open the Class Wizard and find the wm_ctlcolor message. The onctlcolor () function is reloaded
M_list.AddString (GetItem (I ));}}
5. Add the button ("set Color") Response Function to set the Color attribute of the control.Void CToppPropPage: OnButtonSetcolor (){// TODO: Add your control notification handler code hereCColorDialog dlg;If (dlg. DoModal () = IDOK ){Long lcolor = dlg. GetColor ();SetPropText ("Color", lcolor );GetDlgItem (IDC_STATIC_COLOR)-> Invalidate ();}}
6. Add the WM_CTLCOLOR message response function, obtain the Color attribute of the control in the function, and use th
C/C ++ codeCimagelist imglist; // sets an image list for clistctrl to set the Row Height.Imglist. Create (idb_bitmap4, 16, 1, RGB (255,255,255); // idb_bitmap4 is 16*16, so the row height is 16 pixels.
Clistctrl listctrl = (clistctrl ) getlistctrl ();Listctrl. setimagelist ( imglist, lvsil_small );
I have only used this method at present. There may be other methods, which may be troublesome.
// Self-Summary
In oninitial:
M_clistresult.setitemheight (0, 30 );
Hbrush cate1368manufocusdlg: onctlco
ctestdlg: oninitdialog (){Cdialog: oninitdialog ();Cbitmap BMP;BMP. loadbitmap (idb_bitmap2 );M_brbk.createpatternbrush ( BMP );BMP. deleteobject ();Return true; // return true unless you set the focus to a control}In the Open Class Wizard, find the wm_ctlcolor message, reload the corresponding function onctlcolor (), and add the following:Hbrush ctestdlg: onctlcolor (CDC * PDC, cwnd * pwnd, uint nctlcolor){Hbrush HBr = cdialog: onctlcolor (PDC, pwnd
nctlcolor){Hbrush HBr = cdialog: onctlcolor (PDC, pwnd, nctlcolor );If (pwnd-> getdlgctrlid () = idc_static ){If (this-> color) PDC-> setbkcolor (this-> color );PDC-> settextcolor (0x333333 );}Return HBr;}
Here we mainly want to determine whether pwnd is the static one we want to set.
Finally, we add code in the button and click the button to change the static state.
Void csxdlg: onbutton1 (){This-> font =
The cwnd: onctlcolor function is provided in the MFC class library. This function is called when the child window of the working framework is re-painted. therefore, you can reload the response function of the wm_ctlcolor message. prototype of this function:
Afx_msg hbrush onctlcolor (CDC * PDC, cwnd * pwnd, uint nctlcolor );
The nctlcolor parameter is used to specify the control type, which can be:
. Ctlcolor_btn button control
. Ctlcolor_dlg dialog box
. Ctlcolor_edit edit box
. Ctlcolor_listbo
Use of the VC picture control
Method 1. First, use the picture control to implement it in the simplest way.
Steps:
Import an image in the resource with the ID idb_bitmap2
Then, add a picture control in the dialog box and right-click to open properties,
Select bitmap from the type drop-down box, and an image drop-down box will appear below,
After the image is opened, all the loaded images are displayed,
Select the image you want and run the program.
Method 2vc picture control.
Similarly, load an
:Code:1. Load bitmap in the dialog initialization function OnInitDialog, and then create a new paint brush.Cbitmapdemodlgメッセージハンドラーbool Cbitmapdemodlg::oninitdialog () {cdialogex::oninitdialog ();//"バージョン ..." メニューをシステムメニューに Append します. Idm_aboutboxは, システムコマンドの range girth になければなりません. ASSERT ((Idm_aboutbox 0xfff0) = = Idm_aboutbox); ASSERT (Idm_aboutbox 2. Add a response function for Windows message wm_ctlcolor.Hbrush Cbitmapdemodlg::onctlcolor (cdc* PDC, cwnd* pWnd, UINT nctlcolor) {hbrush
("this is a test "));
Or:
Getdlgitem (idc_edit1)-> setwindowtext ("sdfsa ");Getdlgitem (idc_static1)-> setwindowtext ("sdfsa ");
The following continues ....
//////////////////////////////////////// ////////////
//////////////////////////////////////// /////////////
1. Set the cedit background color
You need to add a message function:
Hbrush ceditdlg: onctlcolor (CDC * PDC, cwnd * pwnd, uint nctlcolor){Hbrush HBr = cdialog: onctlcol
Label: static text
Idc_showtime is the ID of the edit box.
M_showtime is the variable in the static edit box.
1. In DLG. h
Cbrush m_showtimebrush;
Cfont m_editfont; // font
2. oninitdialog ()
M_showtimebrush.createsolidbrush (RGB (204,0, 204); // edit the background color of the box.Cedit * m_editaa = (cedit *) getdlgitem (idc_showtime); // idc_showtime is the edit box ID.M_editfont.createpointfont (220, _ T (""); // select the fontM_editaa-> setfont ( m_editfont );
3. Add onctlcolor in the Clas
Old brother has such a ready-madeProgram, The function is not much more than yours: It adds the function of changing to red, which is relatively simple:1 define a hand-shaped mouse Resource:# Ifndef idc_hand# Define idc_hand makeintresource (32649)# Endif2. Define the font color switch bool m_bcolorswitchopened. If it is not true, the font turns red and the initialization value is false,3. Define the offline function to facilitate calling.
Void cctmpdlg: addline () {crect rect; cstatic * sta =
1. Add the font and color variable [cpp] public: CFont m_myFont; // font object COLORREF m_myColor; // color object 2. initialize the OnInitDialog () function in the dialog box () initialize the font and color [cpp] // TODO: add additional initialization code m_myFont.CreatePointFont (150, _ T (" 文 "); m_myColor = RGB (255, 0,255); 3. Add the WM_CTLCOLOR message response function for the dialog box class, and add the Code [cpp] afx_msg HBRUSH OnCtlColor (CDC * pDC, CWnd * pWnd, UINT nCtlColor);
. LoadBitmap (IDB_BITMAP2);M_brbk.createpatternbrush (bmp);Bmp. DeleteObject ();...return TRUE; Return TRUE unless you set the focus to a control}In the Open Class Wizard, locate the WM_CTLCOLOR message, overload the corresponding function OnCtlColor (), and add the following:Hbrush Ctestdlg::onctlcolor (cdc* PDC, cwnd* pWnd, UINT nCtlColor){Hbrush HBR = Cdialog::onctlcolor (PDC, PWnd, nCtlColor);if (pWnd = = this){return M_BRBK;}return
::OnInitDialog ();CBitmap bmp;Bmp. LoadBitmap (IDB_BITMAP2);M_brbk.createpatternbrush (bmp);Bmp. DeleteObject ();return TRUE; Return TRUE unless you set the focus to a control}In the Open Class Wizard, locate the WM_CTLCOLOR message, overload the corresponding function OnCtlColor (), and add the following:Hbrush Ctestdlg::onctlcolor (cdc* PDC, cwnd* pWnd, UINT nCtlColor){Hbrush HBR = Cdialog::onctlcolor (PDC, PWnd, nCtlColor);if (pWnd = = this){return
Re-on_wm_paint (), On_wm_ctlcolor () the corresponding function of the message OnPaint (), OnCtlColor ()
(i) OnPaint ()
Cdialogex::onpaint ();
CRect rect;
CPaintDC DC (this);
GetClientRect (rect);
dc. Fillsolidrect (Rect, RGB (217, 241)); Set to light blue background(ii) OnCtlColor ()
Hbrush HBR = Cdialogex::onctlcolor (PDC, pwnd, nCtlColor);
TODO: Change any features of the DC here if (nCtlColor = ctlcolor_btn
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.