Class ICustEdit

3DS Max Plug-In SDK

Class ICustEdit

See Also: Class ICustomControl, Custom Controls.

class ICustEdit : public ICustomControl

Description:

This control is a simple text input control. The user may type any string into the field and the plug-in is notified when the user presses the ENTER key. There are also methods to parse and return integer and floating point values entered in the control.

image\cc1.gif

To initialize the pointer to the control call:

Prototype:

ICustEdit *GetICustEdit(HWND hCtrl);

To release the control call:

Prototype:

ReleaseICustEdit(ICustEdit *ice);

The value to use in the Class field of the Custom Control Properties dialog is: CustEdit

The following messages may be sent by the edit control:

This message is sent when the control gets focus or when the user presses the ENTER key while using the control.

WM_CUSTEDIT_ENTER

wParam contains the custom edit control resource ID.

lParam contains the HWND of custom edit control.

Methods:

Prototype:

virtual void GetText( TCHAR *text, int ct )=0;

Remarks:

This retrieves the text entered into the control.

Parameters:

TCHAR *text

Storage for the text to retrieve.

int ct

Specifies the maximum length of the string returned.

Prototype:

virtual void SetText( TCHAR *text )=0;

Remarks:

This method places the text into the control for editing.

Parameters:

TCHAR *text

The text to place in the control.

Prototype:

virtual void SetText( int i )=0;

Remarks:

This method allows you to pass in an integer value to the control. The integer is converted to a string and displayed in the control.

Parameters:

int i

This value is converted to a string and displayed in the control.

Prototype:

virtual void SetText( float f, int precision=3 )=0;

Remarks:

This method allows you to pass in a floating point value to the control. The float is converted to a string and displayed in the control.

Parameters:

float f

This value is converted to a string and displayed in the control.

int precision=3

The precision argument is simply the number of decimal places that get represented in the string that appears in the edit field. So if the arguments were (1.0f/3.0f, 3) then the string "0.333" would appear in the edit field.

Prototype:

virtual int GetInt(BOOL *valid=NULL)=0;

Remarks:

This method parses and returns an integer value from the control.

Parameters:

BOOL *valid=NULL

This pointer, if passed, is set to TRUE if the input is 'valid'; otherwise FALSE. FALSE indicates that something caused the parsing of the input to terminate improperly. An example is a non-numeric character. So for example, if the user entered "123jkfksdf" into the field the valid pointer would be set to FALSE.

Prototype:

virtual float GetFloat(BOOL *valid=NULL)=0;

Remarks:

This method parses and returns a floating point value from the control.

Parameters:

BOOL *valid=NULL

This pointer, if passed, is set to TRUE if the input is 'valid'; otherwise FALSE. FALSE indicates that something caused the parsing of the input to terminate improperly. An example is a non-numeric character. So for example, if the user entered "123jkfksdf" into the field this pointer would be set to FALSE.

Prototype:

virtual void SetLeading(int lead)=0;

Remarks:

A developer doesn't normally need to call this method. This offsets the text vertically in the edit control.

Parameters:

int lead

This parameter specifies the number of pixels to offset.

Prototype:

virtual void WantReturn(BOOL yesNo)=0;

Remarks:

This method is available in release 2.0 and later only.

This method allows custom handling of the RETURN key. If you pass TRUE to this method an EN_CHANGE message will be sent to the control when the RETURN key is pressed. The EN_CHANGE message is sent when the user has taken any action that may have altered text in an edit control so developer need to also call GotReturn() (documented below) to see if it was indeed a RETURN keypress.

Parameters:

BOOL yesNo

If TRUE, then when the user presses the RETURN key in that control, the edit field will send an EN_CHANGE message to the owner, and calling GotReturn() will return TRUE.

Sample Code:

Below is the way this is handled by the Hit By Name dialog. In that dialog, when the user enters a wild card pattern into the name match field and presses RETURN, the dialog is exited with the items matching the pattern selected. The way this is accomplished is by pass TRUE to WantReturn() and then processing the EN_CHANGE message on the control. If GotReturn() is TRUE the Win32 function PostMessage() is used to send the IDOK message to exit the dialog. If this wasn't done, pressing RETURN in the edit control would only enter the text -- the user would have to move the mouse over the OK button and press it.

 case IDC_HBN_PATTERN:

  if (HIWORD(wParam)==EN_CHANGE) {

   iName = GetICustEdit( GetDlgItem(hDlg,IDC_HBN_PATTERN) );

   iName->GetText(buf,256);

   ct = _tcslen(buf);

   if(ct && buf[ct-1] != _T('*'))

    _tcscat(buf, _T("*"));

   SendMessage(sbn->hList, LB_RESETCONTENT, 0, 0);

   sbn->SetPattern(GetDlgItem(hDlg, IDC_HBN_PATTERN), buf);

   sbn->BuildHitList(ct);

   if(iName->GotReturn())

    PostMessage(hDlg,WM_COMMAND,IDOK,0);

   ReleaseICustEdit(iName);

  }

  break;

Prototype:

virtual BOOL GotReturn()=0;

Remarks:

This method is available in release 2.0 and later only.

This method should be called on receipt of an EN_CHANGE message. It return TRUE if pressing the RETURN key generated the message; otherwise FALSE.

Prototype:

virtual void GiveFocus()=0;

Remarks:

This method is available in release 2.0 and later only.

Calling this method gives the control the focus to receive input.

Prototype:

virtual BOOL HasFocus()=0;

Remarks:

This method is available in release 2.0 and later only.

Returns TRUE if the control has the focus to receive input; otherwise FALSE.

Prototype:

virtual void WantDlgNextCtl(BOOL yesNo)=0;

Remarks:

This method is available in release 2.0 and later only.

Determines whether the TAB key may be used to jump to the next control in the tab sequence.

Parameters:

BOOL yesNo

TRUE to enable the TAB key to move to the next control; FALSE to disable the TAB key from moving the focus.

Prototype:

virtual void SetNotifyOnKillFocus(BOOL onOff)=0;

Remarks:

This method is available in release 2.0 and later only.

Normally when a user exits an edit filed the notification WM_CUSTEDIT_ENTER is sent. Many plug-ins key off this message to finalize the input of values. For instance, if the user is entering a value into an edit field and they hit the TAB key to leave the field the value should be entered. Normally this is the desired behavior. However, as a special case condition, if a developer does not want to update the value, this method may be called so the WM_CUSTEDIT_ENTER notification won't be sent when the edit control loses focus.

Parameters:

BOOL onOff

TRUE to turn on; FALSE to turn off.

Prototype:

virtual void SetBold(BOOL onOff)=0;

Remarks:

This method is available in release 3.0 and later only.

Sets the text font in the edit control to display in a bold format or normal.

Parameters:

BOOL onOff

TRUE to turn bolding on; FALSE to turn off.