Edit controls and checkboxes are ultimately also just a special form of window. So you can also create them with CreateWindow. Here is an example from Charles Petzold:
switch (message)
{
case WM_CREATE:
cxChar = LOWORD(GetDialogBaseUnits());
cyChar = HIWORD(GetDialogBaseUnits());
hwndButton = CreateWindow(TEXT("button"),
TEXT("CHECKBOX"), WS_CHILD | WS_VISIBLE | BS_CHECKBOX,
cxChar, cyChar, 20*cxChar, 2*cyChar,
hwnd, (HMENU)IDC_CHKBOX1,
((LPCREATESTRUCT)lParam)->hInstance, NULL);
return 0;
}