> For the complete documentation index, see [llms.txt](https://fearless.gitbook.io/creating-controls-in-assembler/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fearless.gitbook.io/creating-controls-in-assembler/our-first-control/external-end-user-functions.md).

# External End-User Functions

Functions that will defined for use **externally** by the end-user of our control will be:

```
SimpleButtonRegister    PROTO
SimpleButtonCreate      PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
SimpleButtonGetProperty PROTO :DWORD, :DWORD
SimpleButtonSetProperty PROTO :DWORD, :DWORD, :DWORD
SimpleButtonGetState    PROTO :DWORD
SimpleButtonSetState    PROTO :DWORD, :DWORD
```

The `SimpleButton.asm` will contain these functions *and* other functions designed to be used internally by the control itself. I prefix the functions that will be used **internally** with an **underscore** and an **abbreviation**, but you can use whatever naming convention you desire.

## Custom Messages For The End-User

Our custom message which are used in conjunction with [SendMessage](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx) api call, can be used instead of the `SimpleButtonSetProperty` / `SimpleButtonGetProperty` and `SimpleButtonGetState` / `SimpleButtonSetState` functions, are defined as:

```
SB_GETPROPERTY           EQU WM_USER + 1800
SB_SETPROPERTY           EQU WM_USER + 1799
SB_GETSTATE              EQU WM_USER + 1798
SB_SETSTATE              EQU WM_USER + 1797
```

We will cover the usage of some of these functions and mesages later on.
