Другие языки программирования и технологии
оконное приложение c++
здравствуйте у меня вопрос. Когда я создаю консольное приложение меня имеется только консоль а как мне сделать оконное или же точнее стандартное окно когда я это пытался сделать у меня было окно но в файле cpp уже есть какой-то код (текст) так куда мне вставлять свой код? или есть другой способ создать окно. я работа в программе visual studio 2017.
Используя WinAPI:
#include < Windows.h >
LRESULT CALLBACK WndProc(HWND wnd, UINT msg, WPARAM w, LPARAM l) {
switch (msg)
case WM_CLOSE: DestroyWindow(wnd); break;
case WM_DESTROY: PostQuitMessage(0); break;
default: return DefWindowProc(wnd, msg, w, l);
}
return 0;
}
WCHAR *classname = L"MyWindow";
WCHAR *title = L"My application";
int _tmain(int argc, _TCHAR* argv[]) {
WNDCLASS wc;
SecureZeroMemory(&wc, sizeof(WNDCLASS));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszClassName = classname;
wc.lpfnWndProc = WndProc;
RegisterClass(&wc);
HWND wnd = CreateWindow(classname, title, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, GetModuleHandle(NULL), 0);
ShowWindow(wnd, SW_SHOWNORMAL);
UpdateWindow(wnd);
MSG msg; BOOL ret;
while ((ret = GetMessage(&msg, wnd, 0, 0)) != 0) {
if (ret == -1) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
"куда мне вставлять свой код?" - зависит от того, что это за код. В общем случае работа оконных приложений строится на событиях - вот и пиши свой код в обработчике сообщения, соответствующего нужному событию. Например, если хочешь чтобы код выполнялся в ответ на клик по кнопке, можно изменить оконную процедуру (из кода выше) таким образом:
#define BUTTON1 1 // идентификатор кнопки
LRESULT CALLBACK WndProc(HWND wnd, UINT msg, WPARAM w, LPARAM l) {
switch (msg) {
case WM_CREATE: // при создании окна создаём в окне кнопку:
CreateWindow(L"BUTTON", L"Нажми меня", WS_CHILD | WS_VISIBLE,
30, 30, 100, 40, wnd, (HMENU)BUTTON1, GetModuleHandle(NULL), 0);
break;
case WM_COMMAND:
if (HIWORD(w) == BN_CLICKED // сообщение о клике по кнопке
&& LOWORD(w) == BUTTON1) { // проверка, что клик был по нужной кнопке
// тут пиши нужный код, например:
MessageBox(wnd, L"Нажата кнопка", L"Сообщение", MB_OK | MB_ICONINFORMATION);
}
break;
case WM_CLOSE: DestroyWindow(wnd); break;
case WM_DESTROY: PostQuitMessage(0); break;
default: return DefWindowProc(wnd, msg, w, l);
}
return 0;
}
#include < Windows.h >
LRESULT CALLBACK WndProc(HWND wnd, UINT msg, WPARAM w, LPARAM l) {
switch (msg)
case WM_CLOSE: DestroyWindow(wnd); break;
case WM_DESTROY: PostQuitMessage(0); break;
default: return DefWindowProc(wnd, msg, w, l);
}
return 0;
}
WCHAR *classname = L"MyWindow";
WCHAR *title = L"My application";
int _tmain(int argc, _TCHAR* argv[]) {
WNDCLASS wc;
SecureZeroMemory(&wc, sizeof(WNDCLASS));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszClassName = classname;
wc.lpfnWndProc = WndProc;
RegisterClass(&wc);
HWND wnd = CreateWindow(classname, title, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, GetModuleHandle(NULL), 0);
ShowWindow(wnd, SW_SHOWNORMAL);
UpdateWindow(wnd);
MSG msg; BOOL ret;
while ((ret = GetMessage(&msg, wnd, 0, 0)) != 0) {
if (ret == -1) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
"куда мне вставлять свой код?" - зависит от того, что это за код. В общем случае работа оконных приложений строится на событиях - вот и пиши свой код в обработчике сообщения, соответствующего нужному событию. Например, если хочешь чтобы код выполнялся в ответ на клик по кнопке, можно изменить оконную процедуру (из кода выше) таким образом:
#define BUTTON1 1 // идентификатор кнопки
LRESULT CALLBACK WndProc(HWND wnd, UINT msg, WPARAM w, LPARAM l) {
switch (msg) {
case WM_CREATE: // при создании окна создаём в окне кнопку:
CreateWindow(L"BUTTON", L"Нажми меня", WS_CHILD | WS_VISIBLE,
30, 30, 100, 40, wnd, (HMENU)BUTTON1, GetModuleHandle(NULL), 0);
break;
case WM_COMMAND:
if (HIWORD(w) == BN_CLICKED // сообщение о клике по кнопке
&& LOWORD(w) == BUTTON1) { // проверка, что клик был по нужной кнопке
// тут пиши нужный код, например:
MessageBox(wnd, L"Нажата кнопка", L"Сообщение", MB_OK | MB_ICONINFORMATION);
}
break;
case WM_CLOSE: DestroyWindow(wnd); break;
case WM_DESTROY: PostQuitMessage(0); break;
default: return DefWindowProc(wnd, msg, w, l);
}
return 0;
}
делаешь MFC проект пустой, там по умолчанию уже будет окно
Окна можно по-разному создавать, есть библиотеки, можно на чистом Win API. Я бы пример скачал (или в книжке посмотрел) и видоизменял его.
Похожие вопросы
- Visual Studio 2010 C++: Как создать оконное приложение?
- какой язык учить, что бы делать оконные приложения
- с++ для оконных приложений что лучше учить qt или MFC, winapi или другое?
- Оконное приложение на WinAPI, вопрос про параметры функции WndProc. Язык программирования Си.
- Консольное приложение C#, программисты, выручайте)
- Что лучше учить? Разработка сайтов? HTML/CSS/PHP или все же разработку приложений? C++/Java/Python ???
- посоветуйте пожалуйста книги по разработке виндовс приложений на C# и
- c#. Сортировка массива в отдельном методе. Консольное приложение.
- Что нужно знать для создания полноценного приложения на c++ ?
- Работаю в Visua C++ 2008. консольное приложение Win32/