Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

Child Window Controls

More notes at:


http://www.cs.binghamton.edu/~reckert/360/class5a.htm

Child Window Controls


Windows created by a parent window ? An app uses them in conjunction with parent ? Normally used for simple I/O tasks ? Properties, appearance, behavior determined by predefined class definitions
But behavior can be customized Easy to set them up as common Windows objects
buttons, scroll bars, etc.

Can also define custom Child Window Controls

Allow user to display/select/input info in standard ways ? Windows Environment does most of work in:
?

painting/updating a Control's screen area determining what user is doing

Often used as input devices for parent window ? Are the "working components" of Dialog Boxes ? Windows OS contains each control's WinProc
?

so messages to controls are processed in predefined way


?

Parent window communicates with controls by sending/receiving messages

Six Classic Control Types


?

Go back to first versions of Windows

Type Window Class MFC Class ---------------------------------------------------Static Text Button Edit Control List Box Combo Box Scroll Bar
?

STATIC BUTTON EDIT LISTBOX COMBOBOX SCROLLBAR

CStatic CButton CEdit CListBox CComboBox CScrollBar

All are windows

Creating Controls--Win32 API


?

CreateWindow ()
For any kind of window, including a control Typically called in response to WM_CREATE or WM_SIZE

Parameters:
1. Predefined control window class names:
"STATIC", "BUTTON", EDIT, LISTBOX, COMBOBOX, SCROLLBAR, others

2. Name of the window


BUTTON, EDIT, STATIC classes:
text in center of control

COMBOBOX, LISTBOX, SCROLLBAR classes:


ignored (use "")

3. Window style
WS_, SS_, BS_, ES_, LBS_, CBS_, SBS_ (see CreateWindow help) Several styles can be combined with the bitwise or operator ( | ) All controls should include WS_CHILD style

Parameters 4-7:
X,Y position (Relative to the upper left corner of parent window client area) Width & Height

8. Handle to the parent window

9. Handle to menu
Controls dont have menus So hMenu parameter used to hold controls integer ID ID value passed with WM_COMMAND message generated when user interacts with the control Allows program to identify which control was activated

10. Handle to instance of program creating control


GetWindowLong() usually used to get this value Could declare a global HINSTANCE variable and use value that comes in from WinMain()

11. Pointer to window creation data


Normally NULL

Example (Win32 API)


?

In response to WM_CREATE in Main Windows WndProc():


HWND hMyButton; HINSTANCE hInstance; hInstance = (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE); hMyButton = CreateWindow (BUTTON, Push Me, WS_CHILD | BS_PUSHBUTTON, 10, 10, 130, 60, hWnd, (HMENU)ID_MYBUTTON, hInstance, NULL); ShowWindow (hMyButton, SW_SHOWNORMAL);

Could be done in response to WM_SIZE message


Then width & height of client area can be gotten from LOWORD & HIWORD of lParam

Messages from Controls


?

Most work as follows:


User interacts with the control WM_COMMAND message sent to parent window LOWORD(wParam) = Control ID lParam = controls window handle HIWORD(wParam) = notification code
identifies what the user action was

Win32 API Control Message Handlers


? Put

Control message handlers in same switch/case statement with menu handlers (WM_COMMAND) ? Done just as for menu handlers

Sending Messages to Controls, Win32 API


SendMessage( )--sends message to a windows WinProc( ) ? Doesn't return until message has been processed ? Parameters:
?

Handle of destination window ID of message to send wParam and lParam values containing message data, if any
Need to be type cast

Example, Win32 API


?

Send a message to hMyControl


SendMessage (hMyControl, WM_SETTEXT, 0, (LPARAM) Hello) ; Here message is WM_SETTEXT When received, control's WndProc() changes controls window name (text string displayed) For this message wParam must be 0;

There are many messages that can be sent to a control ? Depend on type of control
?

See online help

Static Controls
Lots of styles, see online help on Static Control Styles. Some examples: SS_BITMAP, SS_CENTER, SS_GRAYFRAME, SS_ICON, SS_SIMPLE, SS_WHITEFRAME, etc. ? Change text with WM_SETTEXT message May need to format values with wsprintf( ) ? Retrieve text with WM_GETTEXT message or GetWindowText()
?

Can convert string to values using sscanf( )

Static Controls do not send messages ? Program examples: static, static_mfc


?

Button Controls
Some Styles: BS_PUSHBUTTON, BS_RADIOBUTTON, BS_CHECKBOX, BS_OWNERDRAW, BS_GROUPBOX, etc. ? Button notification codes:
?

BN_CLICK (also BN_DOUBLECLICK)


?

Some messages you can send to buttons:


BM_SETCHECK, BM_GETCHECK, BM_SETSTATE, BM_GETSTATE, etc.

Program examples: button

Child Window Controls: List Boxes, Edit Controls

List Box Controls


?

Lots of styles: see on- line help on LBS_


LBS_STANDARD very common can send messages to parent

Program communicates with list box by sending it messages; some common List Box messages:
LB_RESETCONTENTS, LB_ADDSTRING, LB_GETCURSEL, LB_GETTEXT, LB_DELETESTRING

? ? ?

Some List Box Notification codes:


LBN_SELCHANGE, LBN_DBLCLK

Combo boxes much like list boxes (CBS_, CB_, CBN_) Program examples: listbox, combo

EDIT CONTROLS
? For

viewing and editing text ? Current location kept track of with a "carat
A small vertical line
? Backspace,

Delete, arrow keys, highlighting work as expected ? Scrolling possible (use WS_HSCROLL, WS_VSCROLL styles) ? No ability to format text with different fonts, sizes, character styles, etc.
Use Rich Edit Control for this

Edit Control Styles


? Some

common styles

ES_LEFT, ES_CENTER, ES_RIGHT, ES_MULTILINE, ES_AUTOVSCROLL, ES_PASSWORD


See Online Help on Edit Styles

Edit Control Text


? Text

in an edit control stored as one long character string ? Carriage return <CR> is stored as ASCII code (0x0D,0x0A) ? <CR> inserted automatically if a line doesnt fit and wraps ? NULL character inserted only at end of last line of text

Edit Control Messages


?

User interacts with edit control,


WM_CONTROL message to parent LOWORD(wParam) = Control ID lParam = controls window handle HIWORD(wParam) = EN_** notification code
identifies what the user action was e.g., EN_CHANGE See Online Help EN_***

Sending Messages to an Edit Box


? ?

As with other controls use SendMessage() Some important messages


WM_GETTEXT, WM_SETTEXT Multiline edit boxes:
EM_GETLINECOUNT(multiline edit boxes)
Returns number of lines in the control EM_GETLINE: Copy a line to a buffer EM_LINEINDEX: Get a lines character index Number of characters from the beginning of edit control to start of specified line

EM_LINELENGTH to get length of line

See Edit1 example program

You might also like