Значит так : Я создал проэкт Visual C++ => Win32 Project => Windows Application ( ATL ). Далее в функции BOOL InitInstance(HINSTANCE, int) {...} написал следующий код :
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
//AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES); // add flags to support other controls
InitCommonControls();
LoadLibrary(CRichEditCtrl::GetLibraryName());
RECT rect;
rect.left = 10; // x1
rect.top = 10; // y1
rect.right = 150; // x2
rect.bottom = 120; // y2
// GetClientRect(hWnd, &rect);
CEdit edit;
edit.Create(hWnd,rect,_T("Edit"),WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE,0,IDC_MAINEDIT,0);
edit.SetWindowText(_T("Edit control"));
edit.SetFocus();
CTrackBarCtrl Slider;
rect.top = rect.bottom + 10;
rect.bottom = rect.top + 30;
HWND hWnd_Slider = Slider.Create(hWnd,rect,_T("SLider"),WS_CHILD|WS_VISIBLE,0,1,0);
Slider.SetRange(0,255);
CButton button;
rect.top = rect.bottom + 10;
rect.bottom = rect.top + 40;
button.Create(hWnd,rect,_T("Button"),WS_CHILD|WS_VISIBLE,0,IDC_BUTTON1,0);
CListBox list;
rect.top = rect.bottom + 10;
rect.right = 240;
rect.bottom = rect.top + 80;
list.Create(hWnd,rect,_T("ListBox"),WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_HSCROLL,0,IDC_LISTBOX,0);
list.AddString( _T("String_1") );
list.AddString( _T("String_2") );
list.AddString( _T("String_3") );
list.AddString( _T("String_4") );
list.AddString( _T("String_5") );
CRichEditCtrl
rect.top = rect.bottom + 10;
rect.bottom = rect.top + 100;
rich.Create(hWnd, rect, _T("RichEdit"),WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE,0,IDC_RICHEDIT,0);
rich.SetWindowText(_T("Rich Edit"));
CStatic m_static;
rect.top = rect.bottom + 10;
rect.bottom = rect.top + 50;
m_static.Create(hWnd, rect, _T("Static"),WS_CHILD|WS_VISIBLE|WS_BORDER,0,IDC_MYSTATIC,0);
m_static.SetWindowText(_T("Static control"));
CComboBox m_combo;
rect.top = rect.bottom + 20;
rect.bottom = rect.top + 50;
m_combo.Create(hWnd, rect, _T("ComboBox"),WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|CBS_DROPDOWNLIST,0,IDC_COMBO,0);
m_combo.AddString(_T("String_1"));
m_combo.AddString(_T("String_2"));
m_combo.AddString(_T("String_3"));
m_combo.SetCurSel( 0 );
/**********/
CTreeViewCtrl m_tree;
rect.top = rect.bottom + 10;
rect.bottom = rect.top + 80;
m_tree.Create(hWnd, rect, _T("TreeView"), WS_CHILD|WS_VISIBLE|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|WS_BORDER, WS_EX_CLIENTEDGE,IDC_TREE,0);
m_tree.EnableScrollBar(SB_HORZ,ESB_ENABLE_BOTH);
TCHAR *strName = _T("Root");
HTREEITEM Root = m_tree.InsertItem(strName, 6, 6, TVI_ROOT, TVI_LAST);
// Нада доделать!!
/**********/
CUpDownCtrl m_port_spin;
rect.left = 170; // x1
rect.top = 10; // y1
rect.right = 200; // x2
rect.bottom = 50; // y2
m_port_spin.Create(hWnd, rect, _T("UpDownCtrl"),WS_CHILD|WS_VISIBLE,0,IDC_PORTSPIN,0);
CProgressBarCtrl
rect.right = 300; // x2
rect.top = rect.bottom + 10;
rect.bottom = rect.top + 40;
m_ProgressBar.Create(hWnd,rect,_T("ProgressBar"),WS_CHILD|WS_VISIBLE,0,IDC_PROGRESS,0);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
_ghEnd = hWnd;
Далее в функции LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {...} добавил парочку строчек :
case IDC_BUTTON1:
if ( wmEvent == BN_CLICKED )
MessageBox(hWnd, _T("Click Button"),_T("Message"),MB_OK);
break;
Далее все компилится! Когда нажать на кнопку Button выводится MessageBox. Но после нескольких нажиманий и выводов окна MessageBox кнопка перестает работать — тоеть MessageBox не выводится а в дебаге последняя ошибка это — 0008 (0x0008) Недостаточно памяти для обработки команды.
С чем это связано? Что нада сделать что бы всё работало нормально?