Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2024, 12:49   #1
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 49
По умолчанию Вывод текста в основное окно

Приветствую уважаемые!
Не могу найти как вывести текст в окно (основное, несколько строк).
Этот пример с learn.microsoft.com не собирается.
Пытаюсь переделать. Но CodeBlock ругается - undefined reference to `__imp_TextOutW' хотя сама декларация при поиске видна.
text_out.jpg
Код:
//https://learn.microsoft.com/ru-ru/cpp/windows/walkthrough-creating-windows-desktop-applications-cpp?view=msvc-170
// HelloWindowsDesktop.cpp
// compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c
#define UNICODE//кодировка Unicod
#define STRICT//строгое соответствие
//#include <locale>

#include <windows.h>
#include <wingdi.h>

using namespace std;
// Global variables

// The main window class name.
static wchar_t szWindowClass[] = (L"DesktopApp");

// The string that appears in the application's title bar.
static wchar_t szTitle[] = (L"Windows Desktop Guided Tour Application");

// Stored instance handle for use in Win32 API calls such as FindResource
HINSTANCE hInst;

// Forward declarations of functions included in this code module:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(
   _In_ HINSTANCE hInstance,
   _In_opt_ HINSTANCE hPrevInstance,
   _In_ LPSTR     lpCmdLine,
   _In_ int       nCmdShow
)
{
   WNDCLASSEXW wcex;

   wcex.cbSize = sizeof(WNDCLASSEX);
   wcex.style          = CS_HREDRAW | CS_VREDRAW;
   wcex.lpfnWndProc    = WndProc;
   wcex.cbClsExtra     = 0;
   wcex.cbWndExtra     = 0;
   wcex.hInstance      = hInstance;
   wcex.hIcon          = LoadIcon(wcex.hInstance, IDI_APPLICATION);
   wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
   wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
   wcex.lpszMenuName   = NULL;
   wcex.lpszClassName  = szWindowClass;
   wcex.hIconSm        = LoadIcon(wcex.hInstance, IDI_APPLICATION);

   if (!RegisterClassEx(&wcex))
   {
      MessageBox(NULL,
         (L"Call to RegisterClassEx failed!"),
         (L"Windows Desktop Guided Tour"),
         NULL);

      return 1;
   }

   // Store instance handle in our global variable
   hInst = hInstance;

   // The parameters to CreateWindowEx explained:
   // WS_EX_OVERLAPPEDWINDOW : An optional extended window style.
   // szWindowClass: the name of the application
   // szTitle: the text that appears in the title bar
   // WS_OVERLAPPEDWINDOW: the type of window to create
   // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y)
   // 500, 100: initial size (width, length)
   // NULL: the parent of this window
   // NULL: this application does not have a menu bar
   // hInstance: the first parameter from WinMain
   // NULL: not used in this application
   HWND hWnd = CreateWindowExW(
      WS_EX_OVERLAPPEDWINDOW,
      szWindowClass,
      szTitle,
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, CW_USEDEFAULT,
      500, 100,
      NULL,
      NULL,
      hInstance,
      NULL
   );

   if (!hWnd)
   {
      MessageBox(NULL,
         (L"Call to CreateWindow failed!"),
         (L"Windows Desktop Guided Tour"),
         NULL);

      return 1;
   }

   // The parameters to ShowWindow explained:
   // hWnd: the value returned from CreateWindow
   // nCmdShow: the fourth parameter from WinMain
   ShowWindow(hWnd,
      nCmdShow);
   UpdateWindow(hWnd);

   // Main message loop:
   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0))
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }

   return (int) msg.wParam;
}

//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   PAINTSTRUCT ps;
   HDC hdc;
   wchar_t greeting[] = (L"Hello, Windows desktop!");//undefined reference to `__imp_TextOutW'
    //LPCTSTR greeting[] = {L"Hello, Windows desktop!"};//error: cannot convert 'const WCHAR**' {aka 'const wchar_t**'} to 'const wchar_t*'
   switch (message)
   {
   case WM_PAINT:
      hdc = BeginPaint(hWnd, &ps);

      // Here your application is laid out.
      // For this introduction, we just print out "Hello, Windows desktop!"
      // in the top left corner.
//      TextOutW(hdc,
//         5, 5,
//         greeting, _tcslen(greeting));
      TextOutW(hdc,
         5, 5,
         greeting, wcslen(greeting));
      // End application-specific layout section.

      EndPaint(hWnd, &ps);
      break;
   case WM_DESTROY:
      PostQuitMessage(0);
      break;
   default:
      return DefWindowProc(hWnd, message, wParam, lParam);
      break;
   }

   return 0;
}
Помогите пжл.
P.S. Долго искал в и-нете, но так и не нашел рабочего примера с TextOut.
druidvic вне форума Ответить с цитированием
Старый 05.06.2024, 13:07   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,726
По умолчанию

Цитата:
Сообщение от druidvic Посмотреть сообщение
Но CodeBlock ругается - undefined reference to `__imp_TextOutW' хотя сама декларация при поиске видна.
Декларация и сама функция разные вещи. По теме: не отдали линкеру Gdi32.lib
p51x вне форума Ответить с цитированием
Старый 05.06.2024, 21:19   #3
druidvic
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 49
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Декларация и сама функция разные вещи. По теме: не отдали линкеру Gdi32.lib
Спасибо. Сработало.

P.S. каждый раз искать и подключать "руками"? Можно в настройках CodeBlocks это делать "автоматом"?

P.S.S. В "Global compiler setting" > "Toolchain executable" > "C++ compiler" и "Linker for dynamic libs" у меня указано g++.exe. Так и должно быть? Может для "Linker for dynamic libs" нужен другой файл?
Для "Linker for static libs" - ar.exe.
druidvic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод в окно. apofioz Win Api 6 01.10.2022 05:35
Отправка ТЕКСТА в неактивное окно. onefinal Общие вопросы Delphi 15 29.07.2012 11:50
Вывод 3д через консольное окно. Neketek Visual C++ 0 18.04.2012 08:40
вернуться из подменю в основное Slake Общие вопросы C/C++ 6 27.12.2011 01:44
Вывод примитивов в окно формы CashaL0T Общие вопросы .NET 5 26.11.2008 00:57