Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ WinAPI Прилипание окна к курсору Здравствуйте, подскажите как можно реализовать функцию прилипания окна к курсору по двойному клику по заголовку? Вот сама программа: #include "stdafx.h" #include <windows.h> // заголовочный... Что значит "прилипание"? Курсор же постоянно двигается. Это же просто перетаскивание окна получится. Добавь свой обработчик WM_MOUSEMOVE и смотри в нем, если UserDoneDoubleClick == true, то делай... https://www.cyberforum.ru/ win-api/ thread1722424.html Запись в проектируемый файл (File mapping) C++ WinAPI
Привет и спасибо за внимание :) . Задача состоит в следующем. Нужно спроектировать файл в память, записать в него "что-то". В другом процессе это "нечто" прочитать, и записать файл на диск. Проблема...
Отладка и WinApi C++ WinAPI
Подскажите с помощью чего можно пошагово отладить окно написанное с помощью WinApi? Отлаживают обычно код программы, а не окно :) Я пользуюсь WinDBG, а еще встроенным отладчиком Visual Studio.
C++ WinAPI Как перевести No scrub file attribute ? https://www.cyberforum.ru/ win-api/ thread1723371.html
Здравствуйте! Помогите, пожалуйста, перевести на русский это слово scrub в данном контексте. Отсылки: https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117%28v=vs.85%29.aspx...
C++ WinAPI Рендер треугольника https://www.cyberforum.ru/ win-api/ thread1723158.html
Имею три трехмерные точки - v1, v2, v3. Необходимо отрендерить треугольник. Насколько корректно, я определяю z - координату ? может быть необходимы к.л. коррекций при использовании целого числа ...
C++ WinAPI Программа перелистывания таблицы
Здравствуйте. При решении следующей задачи столкнулся с проблемой: Разработать окно перелистывания таблицы. Причем в окне всегда отображать заголовки столбцов. Первый столбец должен содержать номера... Может лучше воспользоваться готовым контролом? Есть же "List-View Control", там тебе и таблица, и полосы прокруток. Читай, пробуй: Using List-View Controls
C++ WinAPI Ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup Здравствуйте,помогите новичку с WinApi,суть ошибки: 1)Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup 2)Ошибка 2 error LNK1120: неразрешенных... Кто вас такому научил? Функция WinMain вызывается для GUI, впрочем весь код графический. https://www.cyberforum.ru/ win-api/ thread1721868.html C++ WinAPI LPTSTR (непонятное использование указателя) Насколько я понял LPTSTR это wchar_t* или char* в зависимости от того установлен ли UNICODE.. если это так, то я немного не понимаю следующий код (взято у Петцольда): BOOL QueryNotifyText(UINT... Нет, смотри внимательнее: в QueryNotifyText передается не значение, а указатель на указатель (т.е. адрес указателя pName) и делается это для возврата значения. Зачем инициализировать переменную,... https://www.cyberforum.ru/ win-api/ thread1722724.html
C++ WinAPI Дефрагментация файла в FAT 32 https://www.cyberforum.ru/ win-api/ thread1722658.html
Скажите пожалуйста как вывести на консоль кластра в которых записан файл! Написал функцию которая должна возвратить расположение файла но я не могу понять как пользоваться RETRIEVAL_POINTERS_BUFFER...
C++ WinAPI Конвертация Virtual-Key Codes Я хочу сделать функцию которая будет считывать нажатые клавиши независимо от того является ли программа сейчас активная, потом этот текст (включая с не буквенными клавишами например shift, esc,... https://www.cyberforum.ru/ win-api/ thread1723571.html
C++ WinAPI Как проверить, что программа запущена (избежать повторного запуска)? Знаю, что можно с помощью FindWindow, но вдруг FindWindow найдет просто другую программу с похожим заголовком. Можно ли с хендлом найденной программы проделать какие-то действия для определения того,... Эту тему почитай: https://www.cyberforum.ru/cpp-builder/thread87581.html https://www.cyberforum.ru/ win-api/ thread1723599.html C++ WinAPI Handle of Window in wndProc
Есть несколько окон, создавались они одним классом, и привязанны к одному обработчику wndproc. Нужно выудить какое из окон присылает команду, например в WM_CREATE. Изначально делал окна с стилем... Т.е. в WinProc вам нужно определить что это за окно? Почему просто при создании окна не сохранять хендлы в массив? Добавлено через 17 минут Т.е. получается делаем массив структур. В структуре два...
0 / 0 / 0
Регистрация: 29.04.2016
Сообщений: 3
30.04.2016, 16:24  [ТС] 0

Не создается окно функцией CreateWindow - C++ WinAPI - Ответ 9089076

30.04.2016, 16:24. Показов 895. Ответов 4
Метки (Все метки)

Ответ

Программа должна создавать растровое изображение и сохранять его на жестком диске.

WndProc
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
KDib bmp;
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
    TEXTMETRIC tm;
    SIZE size;
    static int width, height;
    COLORREF color;
    int x, y;
    BOOL isFileCreated;
    static char line[2];
    const char ANSI = 65;
 
    switch (uMsg)
    {
    case WM_CREATE:
        hDC = GetDC(hWnd);
        GetTextMetrics(hDC, &tm);
        line[0] = ANSI;
        line[1] = '\0';
        GetTextExtentPoint32A(hDC, line, 1, &size); //Определение ширины строки line в битах
        width = size.cx;
        height = tm.tmHeight;
 
        isFileCreated = bmp.CreateDIB24(width, height, "New BMP");
        if (!isFileCreated)
            MessageBox(hWnd, TEXT("Cannot create BMP file"), TEXT("Error"), MB_OK);
 
        ReleaseDC(hWnd, hDC);
        break;
 
    case WM_PAINT:
        hDC = BeginPaint(hWnd, &ps);
        SetBkColor(hDC, RGB(0, 0, 0));
        SetTextColor(hDC, RGB(255, 255, 255));
        TextOutA(hDC, 0, 0, line, 1);
 
        for (y = 0; y < height; ++y)            //С нижней строки проход по пикселам
            for (x = 0; x < width; ++x) 
            {
                color = GetPixel(hDC, x, height - 1 - y);
                bmp.SetPixel(x, y, color);
            }
 
        bmp.WriteDIB24();
        EndPaint(hWnd, &ps);
        break;
 
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
 
    default: DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
 
    return 0;
}


KDib.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <windows.h>
#include <fstream>
#include <string>
using namespace std;
 
 
class KDib 
{
private:
    int width;                    //Ширина растрового файла
    int height;                   //Высота
    int bytesPerLine;             //Число байтов в одной строке
    
    BITMAPFILEHEADER fileHead;    //Заголовок растрового файла
    BITMAPINFOHEADER infoHead;    //Заголовок информационного блока
    BITMAPINFOHEADER* pInfoHead;
    BYTE* aBitmapBits;            //Массив пикселов
    int imageSize;                //Размер картинки в битах
 
    int fileHeadSize = sizeof(BITMAPFILEHEADER);
    int infoHeadSize = sizeof(BITMAPINFOHEADER);
    
    string error;
    ifstream inpFile;
    ofstream outFile;
public:
    KDib();
    ~KDib();
 
    BOOL CreateDIB24(int w, int h, const char* fileName);  //Создание BMP файла
    void WriteDIB24();                                     //Запись файла на диск
    BOOL LoadFromFile(const char* fileName);               //Загрузка картинки из файла
 
    void SetPixel(int x, int y, COLORREF color);   //Установка пиксела в массив
 
    int Draw(HDC hdc, int xDst, int yDst, int wDst, int hDst,
             int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop);  //Рисование растрового изображения на экране
 
    int GetWidth() { return width; }
    int GetHeight() { return height; }
    const char* GetError() { return error.c_str(); }
};


KDib.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "KDib.h"
 
KDib::KDib()
{
    fileHead.bfType = 0x4d32;
    aBitmapBits = NULL;
}
 
KDib::~KDib()
{
    if (aBitmapBits) delete[] aBitmapBits;
    if (pInfoHead) delete[] pInfoHead;
    if (outFile) outFile.close();
}
 
BOOL KDib::CreateDIB24(int w, int h, const char* fileName)
{
    width = w;
    height = h;
    bytesPerLine = ((width * 24 + 31) / 32) * 4;
    imageSize = bytesPerLine * height;
 
    fileHead.bfSize = fileHeadSize + infoHeadSize + imageSize; //Размер файла
    fileHead.bfOffBits = fileHeadSize + infoHeadSize;          //Отступ битов до картинки 
    
    infoHead.biSize = infoHeadSize;      //Заполнение информационного блока
    infoHead.biWidth = width;
    infoHead.biHeight = height;
    infoHead.biPlanes = 1;
    infoHead.biBitCount = 24;            //Битов на пиксел
    infoHead.biCompression = BI_RGB;
    infoHead.biSizeImage = imageSize;
 
    aBitmapBits = new BYTE[imageSize];  //Создание массива пикселов
    memset(aBitmapBits, 0, imageSize);  //Заполнение массива пикселов нулями
 
    outFile.open(fileName, ios::out | ios::binary | ios::trunc); //Открытие файла на запись
    if (!outFile) 
        return FALSE;
    else 
        return TRUE;
}
 
void KDib::WriteDIB24()
{
    // Запись заголовка BMP файла
    outFile.write((char*)&fileHead, fileHeadSize);
    outFile.write((char*)&infoHead, infoHeadSize);
    // Запись картинки
    outFile.write((char*)aBitmapBits, imageSize);
}
 
BOOL KDib::LoadFromFile(const char * fileName)
{
    inpFile.open(fileName, ios::in | ios::binary); //Открываем файл
    if (!inpFile)
    {
        error = "Cannot open the file";
        return FALSE;
    }
 
    inpFile.read((char*)&fileHead, fileHeadSize); //Читаем с файла заголовок
    if (fileHead.bfType != 0x4d32)
    {
        error = "File is not a BMP";
        return FALSE;
    }
 
    infoHeadSize = fileHead.bfOffBits - fileHeadSize;
    imageSize = fileHead.bfSize - (fileHeadSize + infoHeadSize);
    pInfoHead = (BITMAPINFOHEADER*)(new BYTE[infoHeadSize]);
 
    inpFile.read((char*)pInfoHead, infoHeadSize); //Читаем с файла информационный блок
    width = pInfoHead->biWidth;
    height = pInfoHead->biHeight;
 
    aBitmapBits = new BYTE[imageSize];
    inpFile.read((char*)aBitmapBits, imageSize); //Читаем с файла картинку
 
    return TRUE;
}
 
void KDib::SetPixel(int x, int y, COLORREF color)
{
    aBitmapBits[y*bytesPerLine + 3*x] = GetBValue(color);
    aBitmapBits[y*bytesPerLine + 3*x + 1] = GetGValue(color);
    aBitmapBits[y*bytesPerLine + 3*x + 2] = GetRValue(color);
}
 
int KDib::Draw(HDC hdc, int xDst, int yDst, int wDst, int hDst, int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop)
{
    return StretchDIBits(hdc, xDst, yDst, wDst, hDst, xSrc, ySrc, wSrc, hSrc,
                         aBitmapBits, (CONST BITMAPINFO*)pInfoHead, DIB_RGB_COLORS, rop);
}


Вернуться к обсуждению:
Не создается окно функцией CreateWindow C++ WinAPI
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.04.2016, 16:24
Готовые ответы и решения:

Не создается окно CreateWindow
#include &lt;windows.h&gt; #include &lt;stdlib.h&gt; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM Reg(HINSTANCE, LPCTSTR); ...

Ошибка в CreateWindow: окно не появляется
В коде ошибка - определить какая не могу, но прога компилируется запускается а вот симтом это то что окна не видно, в чем может быть...

Функция CreateWindow не создает дочернее окно
Приветствую! Застрял с довольно идиотской проблемой. Необходимо создать приложение с дочерним окошком средствами WinApi. Я создал win32...

4
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2016, 16:24
Помогаю со студенческими работами здесь

А можно узнать с каким значением второго параметра функции CreateWindow создано окно?
Есть дескриптор. Можно по нему вытянуть эту инфу?

Создается окно и тут же закрывается. Как заставить окно оставаться рабочим открытым?
Как заставить окно оставаться рабочим открытым? Скопировал с одного исходника код (с++ WinApi) для создания окна. И оно сразу...

В SDL2 мне нужно создать окно и туда вставить предметы, но только создается окно а предметы не додаются
И я не знаю что не так. Взял код с туториала. Нужна ваша помощь Мой код:#include &quot;pch.h&quot; #include &quot;SDL.h&quot; ...

Использование диалогового окна, которое создается функцией uigetfile
Подскажите, пожалуйста, как с использование диалогового окна, которое создается функцией uigetfile (путь : D:\HH\file.txt), после того,...

Не создается окно
вот регистрация класса окна WNDCLASSEX wc = { sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, ...

0
Новые блоги и статьи
std::mutex в C++: Хитрости и тонкости использования
Wired 03.03.2025
В C++ ключевым инструментом для обеспечения корректной работы параллельных процессов выступает std::mutex – примитив синхронизации, появившийся в стандарте C++11. До его появления использовали. . .
std::span в C++: Производительно­сть и практическое использование
Wired 03.03.2025
Традиционная работа с указателями и массивами часто приводит к ошибкам и уязвимостям в безопасности. Именно поэтому в C++20 появился std::span - легковесная обертка, обеспечивающая безопасный. . .
std::span в C++: Константность и безопасность типов
Wired 03.03.2025
std::span - представитель семейства view-типов, появившийся в стандарте C++20. Этот компонент предоставляет легковесное и эффективное решение для работы с непрерывными последовательностями данных,. . .
std::span в C++: Subview и Slice
Wired 03.03.2025
std::span - невладеющий тип данных C++, который предоставляет гибкий интерфейс для работы с непрерывными последовательностями элементов. Этот тип существенно упрощает обработку массивов и. . .
std::span в C++: Доступ к элементам и итерирование
Wired 03.03.2025
Появление std::span в стандарте C++20 стало значительным шагом вперед, предоставив разработчикам средство для безопасного и производительного доступа к непрерывным последовательностям элементов. . . .
std::span в C++: Управление массивами данных без владения
Wired 03.03.2025
Новый класс std::span, появившийся в стандарте C++20, открывает возможности для оптимизации работы с последовательными наборами данных. По сути, это легковесная обертка, которая предоставляет доступ. . .
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru