two Dialog Questions

This is a discussion on two Dialog Questions within the Windows Programming forums, part of the Platform Specific Boards category; I am making a Dialog Based App using the WinAPI and i was wondering how to change the background color ...

Re: two Dialog Questions

Originally posted by unanimous I am making a Dialog Based App using the WinAPI and i was wondering how to change the background color of a dialog and also how do i put text into a Rich Edit box manually or using the editor.

Your first question is not easy. There are some really complicated ways of skinning your own dialog box. Check out the Owner Drawn option in the resource editor. Then you'd have to handle all of the WM_PAINT messages and such by yourself. The others ways take way to long to explain, sorry.

Your next question of how to set text in a rich edit box is pretty simple. Basically, get the handle to the edit box using GetDlgItem then use SetWindowText to change what is in the box.

You need to handle the WM_CTLCOLORDLG message in your dialog box procedure.

Here is a snippet from MSDN:

The WM_CTLCOLORDLG message is sent to a dialog box before the system draws the dialog box. By responding to this message, the dialog box can set its text and background colors by using the given display device context handle.

If an application processes this message, it must return the handle of a brush. The system uses the brush to paint the background of the dialog box.

The system does not automatically destroy the returned brush. It is the application's responsibility to destroy the brush when it is no longer needed.

The WM_CTLCOLORDLG message is never sent between threads. It is sent only within one thread.

Note that the WM_CTLCOLORDLG message is sent to the dialog box itself; all of the other WM_CTLCOLOR* messages are sent to the owner of the control.

If a dialog box procedure handles this message, it should cast the desired return value to a BOOL and return the value directly. If the dialog box procedure returns FALSE, then default message handling is performed. The DWL_MSGRESULT value set by the SetWindowLong function is ignored.