|
|
|
I thought skinning an edit control would be easy since it is simple a plain window, but no such luck. I am skinning by subclassing, and hoping to use a bitmap and coloured text in place of the white canvas, but I have so far been unable to do so.
over riding the WM_ERASEBKGND has no effect since the white canvas is drawn directly over the top. Drawing the bitmap on the WM_PAINT message draws, but any line that contains text is converted back to white.
Has anybody done this before or come across any articles which does something similar?
|
|
|
|
|
Skinning an edit control is almost impossible, as an edit control draws itself outside of WM_PAINT. It can be done, but not without flicker.
|
|
|
|
|
Christian Graus wrote: but not without flicker
And I have so far managed to 'partialy' create a flicker free skinning library
I could implement it using a static control, but then I would lose all of the functionality of the EDIT class. Do you have any suggestions?
|
|
|
|
|
I'm afraid that the only totally flicker free option is to write an edit control, which sucks.
Controls like a combo box use the edit box internally, so there are no tricks I can think of.
|
|
|
|
|
I think I have an idea, but it's more of a hack. If I create a STATIC control, and skin that, then overlay that with a transparent EDIT control, it would have the appearence of being skinned. Also it would solve the issues of having to replace the internal scrollbars. I would have to superclass the STATIC control though, which is something I have only ever read about.
|
|
|
|
|
Maybe you should provide a handler for WM_CTLCOLOR message, and use here the SetBkMode(TRANSPARENT) function in order to disable the background white box drown for each character?
|
|
|
|
|
Thanks for the suggestion, but it is not practical. WM_CTLCOLOR is only able to set a single color. In my case I want to use an image. Setting the control to be transparent will just display the contents beneath the control.
|
|
|
|
|
Hi,
I have changed the background color of a dialog in VC6 but having a problem.
I put CBrush m_brBakgnd in the dialog class CMyDlg;
CBrush m_brBakgnd;
Then in OnInitDialog handler of the class I called
m_brBakgnd.CreateSolidBrush(RGB(0,255,0));//green brush
And in OnCtlColor() handler i returned the brush as:
retrun m_brBakgnd;
After doing this all When dialog is displayed then Edit boxes and combox boxes are also having same background color as the dialog box, which is creating the appearace as if Edit boxes and Combo boxes are diabled.
How can I avoid Edit boxes and Combo boxes having the same background color as dialog, so that they can be shown in typical white color.
Waiting for your reply.
Best regards.
Cyber Friend
|
|
|
|
|
Are you checking that the control ID of the pWnd pointer is your dialog? If you do not check that then it will set the same color for all controls.
|
|
|
|
|
Cyber Friend wrote: How can I avoid Edit boxes and Combo boxes having the same background color as dialog, so that they can be shown in typical white color.
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
HBRUSH hbr1=CreateSolidBrush (RGB(0,255,0));
if(pWnd->GetDlgCtrlID ()==IDC_EDIT1)
return hbr;
else
return hbr1;
return hbr1;
}
I hope this helps.
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Hi AnsShuman,
Thanx for reply.
I applied ur said method but now i m getting edit boxes ok but not combox boxes. Combo boxes are still having same background as the dialog;
here is my handler onCtlColor
HBRUSH CGeneralSettingsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbrold = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
HBRUSH hbrnew=CreateSolidBrush (RGB(206,207,206));//dark grey bkgnd
switch(pWnd->GetDlgCtrlID() )
{
case IDD_GENERALSET: // this is Id of dialog itself
break;
case IDC_LBL_GENERALSETTINGS: // main label on dialog
pDC->SetBkMode(TRANSPARENT);
break;
case IDC_ED_CHANNUM:
pDC->SetBkMode(TRANSPARENT);
return hbrold;
case IDC_COMB_PROTOCOL:
pDC->SetBkMode(TRANSPARENT);
return hbrold;
default:
break;
}
return hbrnew;
}
regards.
Cyber Friend
|
|
|
|
|
I don't see anything wrong with the code. It should function properly by not changing the background of the combo box control as you need.
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Hi,
SetDialogBkColor worked for me .
I put this function in InitInstance() of my application and now All dialogs of my application has the same color n there is no problem wid edit boxes and combo boxes.
Thanx to all who participated in the discussion.
Cyber Friend
|
|
|
|
|
You can derived CComboBox class for your combobox and set WM_DRAWITEM for it on new class
also you can see examples on codeproject about it.
|
|
|
|
|
Hai
i want to send a string to the controller board through usb port.I have a gui application where iam controlling operations like reading adc,blinking led reading temp etc.Now i want to send a string .what i need to do
satya
|
|
|
|
|
satyanarayanarao wrote: to the controller board
Do you have an API for your board ?
~RaGE();
I think words like 'destiny' are a way of trying to find order where none exists. - Christian Graus
|
|
|
|
|
|
satyanarayanarao wrote: to the controller board through usb port
USB doesn't work the same way as a serial port: you don't send data on a port but you communicate with a driver instead. And the driver is responsible for teh communication over the USB with the connected device. What kind of device is connected on the USB ? You certainly received a driver with the 'board' and you probably received documentation with it.
To communicate with the driver, you first need to get a handle through the CreateFile function then you can exchange information by using DeviceIOControl function. The code you need to pass to this function are device dependant so you need to check your documentation.
|
|
|
|
|
Hi everyone,
i need to access a private Member of a friend class from a derived class LOL
Class A with private Member AA
Class B has a Member of kind pointer on class A
So B can't access AA.
Using the friend function friend class A, the class B can access AA
All these classes are in a component, so i can't modify the source code.
Now i derive the class B and call these class for example MyB
In MyB i must also use the Pointer to the class A with his private Member.
But then i get the error : C2248
I added also the friend class A to MyB.
Anyone an idea?
Big thanks
|
|
|
|
|
C2248 isnt an error. Can you plz tell what is the error??
We Believe in Excellence
www.aqueelmirza.cjb.net
|
|
|
|
|
Aqueel wrote: C2248 isnt an error.
Sure it is.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
C2248 = members of a derived class cannot access private members of a base class. That's all, if you cannot modify the source, then it can't be done, at least not without monumental hacking.
|
|
|
|
|
Oh thanks Christian. I am working with Visual C++ since 4 years and now i have been informed that C2248 is an error code.
We Believe in Excellence
www.aqueelmirza.cjb.net
|
|
|
|