Предисловие: я новичок в C++ и только начинаю серьезно программировать.
Послепредисловие: я пытался опубликовать ссылку на функции/страницы. Я упоминаю об этом в этом посте, но Stack Overflow накричал на меня, потому что у меня недостаточно репутации, чтобы опубликовать более двух ссылок.
Я пытаюсь сделать несколько простые графические интерфейсы на C++ с помощью Windows API с использованием MinGW и командной строки. Я пытаюсь изменить фон окна, и одна из функций, которая помогает в этом, — это функция CreateSolidBrush. Для этой функции требуется библиотека gdi32, но каждый раз, когда я пытаюсь скомпилировать или связать ее с этой библиотекой, я получаю сообщение об ошибке типа «не могу найти эту библиотеку, отстой».
Страницы 1 и 2 предоставляют полезную информацию о функциях библиотеки MinGW. В сообщениях Stack Overflow № 5683058 и № 17031290 описываются вопросы/проблемы, похожие на мои. Я повсюду искал простой и прямой ответ о том, как связать файлы/библиотеки из других каталогов (особенно библиотек Windows), но мне не удалось реализовать знания с этих страниц. Возможно, ответ смотрит мне прямо в лицо, но мои доблестные усилия «увидеть кошку, нарисовать тигра» тщетны. Возможно, я ввожу неверный путь/имя (lib vs dll?), или, может быть, я совершенно упускаю из виду что-то более фундаментальное (отсутствует заголовок?). Одна команда, которую я пытался использовать:
g++ -LC:\WINDOWS\System32 -lgdi32 gui.cpp
но, похоже, это не работает (примечание: исходный файл с именем «gui.cpp»).
Вопрос 1. Для начала: какое обозначение/команда правильно использовать для ссылки на отдельные заголовочные/исходные файлы, которых нет в текущем каталоге?
Вопрос 2. Какова правильная запись/команда для ссылки на библиотеку, которая находится в текущем каталоге?
Вопрос 3. Какова правильная запись/команда для ссылки на библиотеку, которой нет в текущем каталоге? p>
Я понимаю, что на эти вопросы можно найти разные ответы на других страницах, но они часто смешиваются с указаниями относительно Visual Studio, Eclipse, Code::Blocks, и т. д. и поэтому непонятен новичкам, которые отказываются от роскоши IDE. Я был бы признателен за прямой ответ для вашего типичного, заурядного нуба. Заранее большое спасибо за любую помощь или рекомендации.
Я опубликую свой код, но думаю, что только пара из первых пяти строк имеет значение:
#include
#include
COLORREF desired_color = RGB(200,200,200);
HBRUSH hBrush = CreateSolidBrush(desired_color);
static char str_class_name[] = "MyClass";
static char str_titlebar[] = "My Window Title";
static int window_width = 300;
static int window_height = 300;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
static HINSTANCE program_global_instance = NULL;
int WINAPI WinMain(HINSTANCE program_current_instance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
program_global_instance = program_current_instance;
WNDCLASSEX window_class;
HWND window_handle;
MSG window_message;
window_class.cbSize = sizeof(WNDCLASSEX); // size of struct; always set to size of WndClassEx
window_class.style = 0; // window style
window_class.lpfnWndProc = WndProc; // window callback procedure
window_class.cbClsExtra = 0; // extra memory to reserve for this class
window_class.cbWndExtra = 0; // extra memory to reserve per window
window_class.hInstance = program_global_instance; // handle for window instance
window_class.hIcon = LoadIcon(NULL, IDI_APPLICATION); // icon displayed when user presses ALT+TAB
window_class.hCursor = LoadCursor(NULL, IDC_ARROW); // cursor used in the program
window_class.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // brush used to set background color
window_class.lpszMenuName = NULL; // menu resource name
window_class.lpszClassName = str_class_name; // name with which to identify class
window_class.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // program icon shown in taskbar and top-left corner
if(!RegisterClassEx(&window_class)) {
MessageBox(0, "Error Registering Class!", "Error!", MB_ICONSTOP | MB_OK);
return 0;
}
window_handle = CreateWindowEx(
WS_EX_STATICEDGE, // dwExStyle: window style
str_class_name, // lpClassName: pointer to class name
str_titlebar, // lpWindowName: window titlebar
WS_OVERLAPPEDWINDOW, // dwStyle: window style
CW_USEDEFAULT, // x: horizontal starting position
CW_USEDEFAULT, // y: vertical starting position
window_width, // nWidth: window width
window_height, // nHeight: window height
NULL, // hWndParent: parent window handle (NULL for no parent)
NULL, // hMenu: menu handle (Null if not a child)
program_global_instance, // hInstance : current window instance
NULL // lpParam -Points to a value passed to the window through the CREATESTRUCT structure.
);
if (window_handle == NULL) {
MessageBox(0, "Error Creating Window!", "Error!", MB_ICONSTOP | MB_OK);
return 0;
}
ShowWindow(window_handle, nCmdShow);
UpdateWindow(window_handle);
while(GetMessage(&window_message, NULL, 0, 0)) {
TranslateMessage(&window_message);
DispatchMessage(&window_message);
}
return window_message.wParam;
}
// window_handle: window ID
// uMsg: window message
// wParam: additional message info; depends on uMsg value
// lParam: additional message info; depends on uMsg value
LRESULT CALLBACK WndProc(
HWND window_handle,
UINT Message,
WPARAM wParam,
LPARAM lParam
) {
switch(Message) {
case WM_CLOSE:
DestroyWindow(window_handle);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(window_handle, Message, wParam, lParam);
}
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/331 ... mmand-line
Правильно связывайте библиотеки в командной строке ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1721126779
Anonymous
Предисловие: я новичок в C++ и только начинаю серьезно программировать.
Послепредисловие: я пытался опубликовать ссылку на функции/страницы. Я упоминаю об этом в этом посте, но Stack Overflow накричал на меня, потому что у меня недостаточно репутации, чтобы опубликовать более двух ссылок.
Я пытаюсь сделать несколько простые графические интерфейсы на C++ с помощью Windows API с использованием MinGW и командной строки. Я пытаюсь изменить фон окна, и одна из функций, которая помогает в этом, — это функция CreateSolidBrush. Для этой функции требуется библиотека gdi32, но каждый раз, когда я пытаюсь скомпилировать или связать ее с этой библиотекой, я получаю сообщение об ошибке типа «не могу найти эту библиотеку, отстой».
Страницы 1 и 2 предоставляют полезную информацию о функциях библиотеки MinGW. В сообщениях Stack Overflow № 5683058 и № 17031290 описываются вопросы/проблемы, похожие на мои. Я повсюду искал простой и прямой ответ о том, как связать файлы/библиотеки из других каталогов (особенно библиотек Windows), но мне не удалось реализовать знания с этих страниц. Возможно, ответ смотрит мне прямо в лицо, но мои доблестные усилия «увидеть кошку, нарисовать тигра» тщетны. Возможно, я ввожу неверный путь/имя (lib vs dll?), или, может быть, я совершенно упускаю из виду что-то более фундаментальное (отсутствует заголовок?). Одна команда, которую я пытался использовать:
g++ -LC:\WINDOWS\System32 -lgdi32 gui.cpp
но, похоже, это не работает (примечание: исходный файл с именем «gui.cpp»).
Вопрос 1. Для начала: какое обозначение/команда правильно использовать для ссылки на отдельные [b]заголовочные/исходные файлы[/b], которых [b]нет[/b] в текущем каталоге?
Вопрос 2. Какова правильная запись/команда для ссылки на [b]библиотеку[/b], которая [b]находится[/b] в текущем каталоге?
Вопрос 3. Какова правильная запись/команда для ссылки на [b]библиотеку[/b], которой [b]нет[/b] в текущем каталоге? p>
Я понимаю, что на эти вопросы можно найти разные ответы на других страницах, но они часто смешиваются с указаниями относительно Visual Studio, Eclipse, Code::Blocks, и т. д. и поэтому непонятен новичкам, которые отказываются от роскоши IDE. Я был бы признателен за прямой ответ для вашего типичного, заурядного нуба. Заранее большое спасибо за любую помощь или рекомендации.
Я опубликую свой код, но думаю, что только пара из первых пяти строк имеет значение:
#include
#include
COLORREF desired_color = RGB(200,200,200);
HBRUSH hBrush = CreateSolidBrush(desired_color);
static char str_class_name[] = "MyClass";
static char str_titlebar[] = "My Window Title";
static int window_width = 300;
static int window_height = 300;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
static HINSTANCE program_global_instance = NULL;
int WINAPI WinMain(HINSTANCE program_current_instance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
program_global_instance = program_current_instance;
WNDCLASSEX window_class;
HWND window_handle;
MSG window_message;
window_class.cbSize = sizeof(WNDCLASSEX); // size of struct; always set to size of WndClassEx
window_class.style = 0; // window style
window_class.lpfnWndProc = WndProc; // window callback procedure
window_class.cbClsExtra = 0; // extra memory to reserve for this class
window_class.cbWndExtra = 0; // extra memory to reserve per window
window_class.hInstance = program_global_instance; // handle for window instance
window_class.hIcon = LoadIcon(NULL, IDI_APPLICATION); // icon displayed when user presses ALT+TAB
window_class.hCursor = LoadCursor(NULL, IDC_ARROW); // cursor used in the program
window_class.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // brush used to set background color
window_class.lpszMenuName = NULL; // menu resource name
window_class.lpszClassName = str_class_name; // name with which to identify class
window_class.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // program icon shown in taskbar and top-left corner
if(!RegisterClassEx(&window_class)) {
MessageBox(0, "Error Registering Class!", "Error!", MB_ICONSTOP | MB_OK);
return 0;
}
window_handle = CreateWindowEx(
WS_EX_STATICEDGE, // dwExStyle: window style
str_class_name, // lpClassName: pointer to class name
str_titlebar, // lpWindowName: window titlebar
WS_OVERLAPPEDWINDOW, // dwStyle: window style
CW_USEDEFAULT, // x: horizontal starting position
CW_USEDEFAULT, // y: vertical starting position
window_width, // nWidth: window width
window_height, // nHeight: window height
NULL, // hWndParent: parent window handle (NULL for no parent)
NULL, // hMenu: menu handle (Null if not a child)
program_global_instance, // hInstance : current window instance
NULL // lpParam -Points to a value passed to the window through the CREATESTRUCT structure.
);
if (window_handle == NULL) {
MessageBox(0, "Error Creating Window!", "Error!", MB_ICONSTOP | MB_OK);
return 0;
}
ShowWindow(window_handle, nCmdShow);
UpdateWindow(window_handle);
while(GetMessage(&window_message, NULL, 0, 0)) {
TranslateMessage(&window_message);
DispatchMessage(&window_message);
}
return window_message.wParam;
}
// window_handle: window ID
// uMsg: window message
// wParam: additional message info; depends on uMsg value
// lParam: additional message info; depends on uMsg value
LRESULT CALLBACK WndProc(
HWND window_handle,
UINT Message,
WPARAM wParam,
LPARAM lParam
) {
switch(Message) {
case WM_CLOSE:
DestroyWindow(window_handle);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(window_handle, Message, wParam, lParam);
}
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/33110118/properly-link-libraries-in-the-command-line[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия