Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Leka_1
3 / 3 / 0
Регистрация: 30.07.2012
Сообщений: 57
#1

Подсчет количества симфолов в WinApi - C++ WinAPI

03.10.2012, 00:48. Просмотров 1845. Ответов 3
Метки нет (Все метки)

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
#include <sstream>
#include <tchar.h>
#include <windows.h>
#include <iomanip>
#include <memory>
#include <string.h>
 
 
LRESULT CALLBACK MyWndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);  // оконная процедура
 
INT WINAPI WinMain (HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT nShow)
{
    WNDCLASSEX wcex;
    memset (&wcex, 0, sizeof(wcex));  
    wcex.cbSize = sizeof (wcex);
    wcex.lpfnWndProc = MyWndProc;
    wcex.hInstance = hInst; 
    wcex.style = CS_VREDRAW | CS_HREDRAW; 
    wcex.lpszClassName = L"MyWndClass";  
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);  
    
    if (!RegisterClassEx(&wcex)) 
    {
        MessageBox (NULL, L"Не регистрируется класс", L"Error", MB_OK | MB_ICONERROR); 
        return -1;
    }
 
HWND hWnd = CreateWindow (L"MyWndClass", L"First Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,  CW_USEDEFAULT, CW_USEDEFAULT,  CW_USEDEFAULT, NULL, NULL, hInst, NULL); 
if (!hWnd)  
{
    MessageBox (NULL, L"Не не могу создать окно", L"Error", MB_OK | MB_ICONERROR); 
    return -1;
}
 
//ShowWindow (hWnd, nShow); // nShow - окно будет видно в обычном режиме
UpdateWindow(hWnd);
MSG msg; 
while (GetMessage(&msg, NULL, 0,0))
{
    TranslateMessage (&msg);
    DispatchMessage(&msg);
}
return 0;
}
 
 
LRESULT CALLBACK MyWndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_CLOSE:
    DestroyWindow (hWnd);
    KillTimer (hWnd, 1001);
    return 0;
case WM_DESTROY:
    PostQuitMessage(0);
    return 0; 
case WM_CREATE:  // указатель на структуру 
    /*SetTimer (hWnd, 1001, 500, NULL);
    CreateWindow (L"Button", L"ЖМИ", WS_CHILD | WS_VISIBLE, 100, 10, 150, 50, hWnd, (HMENU)1001, GetModuleHandle(NULL), NULL);
    CreateWindow (L"Edit", L"Писать сюда", WS_CHILD | WS_VISIBLE  , 10, 70, 100, 20, hWnd, (HMENU)1002, GetModuleHandle(NULL), NULL);*/
    
 
    MessageBox (    
        0,
        TEXT ("Моё имя - Иванов Иван Иванович"),
        TEXT ("Резюме - 1 окно"),
        MB_OK);
    //  (HMENU)1;   
    
    MessageBox (    
        0,
        TEXT ("в 1999году окончил средне образовательную школу"),
        TEXT ("Резюме - 2 окно"),
        MB_OK);
    //  (HMENU)2;
 
    MessageBox (    
        0,
        TEXT ("с 2005году работаю"),
        TEXT (""),
        MB_OK | MB_ICONINFORMATION);
    //  (HMENU)3;
return TRUE;
}
return DefWindowProc (hWnd, msg, wParam, lParam);
}
Добавлено через 4 минуты
Помогите пож. только начала учить WinApi и сразу запуталась!
Суть задачи:

Написать приложение, позволяющее вывести на экран краткое резюме с помощью последовательности окон сообщений
(количество окон сообщений - не менее трех). На заголовке последнего окна сообщения должно отобразиться
среднее число символов на странице (общее число символов в рзюме поделить на количество окон сообщений)
Вопрос: Оконную процедуру полностю надо писать в этом случае или можно сокращенно
Например так:
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
# include <Windows.h>
# include <tchar.h>
 
LRESULT CALLBACK WindowProc (HWND, UINT, WPARAM, LPARAM);
 
INT WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
    
    MessageBox (    
        0,
        TEXT ("Моё имя -Иванов Иван Иванович"),
        TEXT ("Резюме - 1 окно"),
        MB_OK),     // в середине окна нет знака "и"
        (HMENU)1;
 
    MessageBox (    
        0,
        TEXT ("в 1999году окончила средне образовательную школу "),
        TEXT ("Резюме - 2 окно"),
        MB_OK),
        (HMENU)2;
 
    MessageBox (    
        0,
        TEXT ("с 2005году работаю"),
        TEXT ("Резюме - 3 окно, среднее число символов на странице"),
        MB_OK | MB_ICONINFORMATION),
        (HMENU)3;
}
Добавлено через 1 минуту
И еще понимаю что надо через длину строки искать размер, и использовать id MessageBox или (HMENU) но не могу сообразить как, помогите пож. кто-может, заранее благодарю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2012, 00:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчет количества симфолов в WinApi (C++ WinAPI):

Подсчет количества "кликов" левой, правой и средней кнопки мыши - C++ WinAPI
Написать приложение в котором ведется подсчет количества &quot;кликов&quot; левой, правой и средней кнопки мыши. Обновляемую статистику необходимо ...

Подсчитать сколько различных симфолов встречаються в строке - Turbo Pascal
Дана строка. ПОДСчитать сколько различных симфолов встречаються в ней. Вывести их количество на экран.

Подсчет количества - C#
Есть БД (sql) с таблицами отображенными на скрине. Нужно организовать автоматический подсчет материалов (необходимых при производстве...

Подсчет количества - MS Access
Здравствуйте! База такая: люди, проучившиеся на разных уровнях в разных филиалах. Упрощенно: ID человека, уровень 1 (логический), место...

Подсчет количества - MS Excel
Уважаемые, подскажите пожалуйста какую функцию использовать для &quot;подсчета количества призовых мест по спортсообществам&quot; (желтым выделено,...

Подсчет количества - C++ Builder БД
Здравствуйте! У меня очень тяжелая проблема... В общем пытаюсь подсчитать количество материалов на складе на произвольную дату....

3
schdub
2959 / 1304 / 239
Регистрация: 19.01.2009
Сообщений: 3,424
Завершенные тесты: 1
03.10.2012, 01:52 #2
Цитата Сообщение от Leka_1 Посмотреть сообщение
Оконную процедуру полностю надо писать в этом случае или можно сокращенно
На это может только ответить лишь тот, кто давал вам данное задание, но мне почему-то кажется, что можно и сокращенно.

Вот примерный набросок:
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
#include <windows.h>
 
// структура, описывающая одно резюме
struct resume {
    TCHAR * title;  // его заголовок
    TCHAR * text;   // его текст
};
 
// функция обработки массива резюме
// r - указатель на массив с резюме
// count - количество резюме в массиве
 
void show_all_and_calculate(resume * r, unsigned count) {
    TCHAR last_resume_title[50];
    unsigned total_symbols = 0;
 
    // начинаем итерацию по каждому резюме
    for (unsigned i = 0; i < count ; ++i) {
        TCHAR * ptitle = r[i].title;
        // суммируем кол-во символов в тексте резюме
        total_symbols += lstrlen(r[i].text);
 
        if (i == count - 1) {
            // если это последнее резюме, то расчитаем
            // среднее кол-во символов в тексте
            wsprintf(last_resume_title,
                TEXT("%s (average symbols ~ %d)"),
                ptitle,
                total_symbols / count);
            ptitle = last_resume_title;
        }
 
        // показываем сообщение на каждой итерации
        MessageBox(NULL, r[i].text, ptitle, MB_OK);
    }
}
 
INT WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) {
    // все наши резюме в одном массиве
    static resume all_resumes[] = {
        { TEXT("Title 1"), TEXT("Resume 1 text") },
        { TEXT("Title 2"), TEXT("Resume 2 text") },
        { TEXT("Title 3"), TEXT("Resume 3 text") }
    };
    // кол-во резюме в массиве
    static unsigned all_resumes_count =
        sizeof(all_resumes) / sizeof(*all_resumes);
 
    // запускаем фукнцию подсчета 
    show_all_and_calculate(all_resumes, all_resumes_count);
 
    return 0;
}
1
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
04.10.2012, 11:39 #3
Мне задавали аналогичное задание и было предложено использовать MessageBox , вот как я наваял
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<windows.h>
#include<tchar.h>
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,LPSTR lpszCmdLine, int nCmdShow)
{
    TCHAR szTitleFirst[] = TEXT("Резюме!");
    TCHAR szName[] = TEXT("Меня зовут Вася");
    TCHAR szSurname[] = TEXT("Моя фамилия Пупкин");
    TCHAR szEndName[] = TEXT("А по отцу я Степанович");
    MessageBox(NULL, szName, szTitleFirst, MB_OK);
    MessageBox(NULL, szSurname, szTitleFirst, MB_OK);
    TCHAR szTitleEnd[100];
    int count = ((strlen(szName) + strlen(szSurname) + strlen(szEndName))/3);
    wsprintf (szTitleEnd, "Ср числ сим:%i", count);
    MessageBox(NULL,szEndName , szTitleEnd, MB_OK); 
     return 0;
}
3
Leka_1
3 / 3 / 0
Регистрация: 30.07.2012
Сообщений: 57
08.10.2012, 22:47  [ТС] #4
Это то что мне надо!

Добавлено через 47 минут
Подскажите пож. этот код ошибки
error C2664: strlen: невозможно преобразовать параметр 1 из "TCHAR [16]" в "const char *"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
может возникнуть из-за того что я работаю на руской версии Visual studio 2010
ругается на эту строку кода
int count = ((strlen(szName) + strlen(szSurname) + strlen(szEndName))/3);

Добавлено через 2 минуты
Нашла ошибку надо было в проекте использовать многобайтовую кодировку
0
08.10.2012, 22:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2012, 22:47
Привет! Вот еще темы с ответами:

подсчет количества - SQL Server
Приветствую, ребята! возникла задача: Показать информацию о количестве восхождений каждого альпиниста на каждую гору. При выводе список...

Подсчет количества символов - C++
Доброго времени суток всем! помогите,пожалуйста,решить задачу: Программа должна подсчитывать количество символов в заданном текстовом...

Подсчет количества записей - PHP БД
Надо получить количество записей в таблице. Прочитал, что есть функция SELECT COUNT(*) FROM &quot;table&quot;. Только вот как ее использовать, чтобы...

Подсчет количества комбинаций - Комбинаторика
Помогите с формулой подсчета количества комбинаций. Суть: игра например 10 из 80 позволяет играть не только 10-кой, а развернутой ставкой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru