system_prog_lab3
.docxМочоный В. О. КИ-133
Лабораторная работа № 3
ЭЛЕМЕНТЫ УПРАВЛЕНИЯ. ФАЙЛЫ РЕСУРСОВ.
3.1 Цель работы
Изучить способы создания элементов управления, различных классов, на главном окне программы. Получить практические навыки использования файла ресурсов и диалоговых окон.
3.2 Выполнение работы
3.2.1 Листинг программы
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include "resource.h"
using namespace std;
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow){
char class_name[] = "main_window";
char app_title[] = "Simple window";
WNDCLASS wc;
HWND hWnd;
MSG msg;
memset(&wc, 0, sizeof(wc));
wc.lpszClassName = class_name;
wc.lpfnWndProc = &WndProc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
RegisterClass(&wc);
hWnd = CreateWindow(
class_name,
app_title,
WS_OVERLAPPEDWINDOW,
20,
20,
500,
400,
NULL,
NULL,
hInstance,
NULL);
if (!hWnd){
MessageBox(NULL, "Create: error", app_title, MB_OK | MB_ICONSTOP);
return FALSE;
}
UINT id_button = 1;
HWND h_button = CreateWindow(
"button",
"Open Dialog",
WS_CHILD | WS_VISIBLE | BS_FLAT,
50, 50,
100, 30,
hWnd,
(HMENU)id_button,
hInstance,
NULL);
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
#define TIMER_ONE 1
char str[] = "Text";
switch (msg){
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hWnd, &ps);
TextOut(hDC, 20, 20, str, strlen(str));
EndPaint(hWnd, &ps);
break;
case WM_COMMAND: {
UINT id = LOWORD(wParam);
UINT code = HIWORD(wParam);
HWND h = (HWND)lParam;
if (id == 1 && code == BN_CLICKED)
{
int i_code = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), hWnd, DlgProc);
}
}
case WM_DESTROY:
KillTimer(hWnd, TIMER_ONE);
PostQuitMessage(0);
break;
default: return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam,
LPARAM lParam){
switch (message){
case WM_INITDIALOG: {
return TRUE;
}
case WM_COMMAND: {
// Идентификатор элемента управления
int id = LOWORD(wParam);
int code = HIWORD(wParam); // Код уведомления
if (id == IDCANCEL){
// Нажаты или ESC, или пункт
// меню IDCANCEL, или кнопка IDCANCEL
EndDialog(hDlg, IDCANCEL);
return TRUE;
}
if (id == 1004 && code == BN_CLICKED) {
// Нажата кнопка ADD
int num = 1 + rand() % 100;
TCHAR arr[11];
wsprintf(arr, "Message %d", num);
HWND hWndList = GetDlgItem(hDlg, IDC_LIST1);
int pos = (int)SendMessage(hWndList, LB_ADDSTRING, 0, (LPARAM)arr);
SendMessage(hWndList, LB_SETITEMDATA, pos, (LPARAM)0);
SetFocus(hWndList);
return TRUE;
}
if (id == 1005 && code == BN_CLICKED) {
// Нажата кнопка DEL
HWND hWndList = GetDlgItem(hDlg, IDC_LIST1);
int lbItem = (int)SendMessage(hWndList, LB_GETCURSEL, 0, 0);
SendMessage(hWndList, LB_DELETESTRING, lbItem, NULL);
//return TRUE;
}
if (id == 1006 && code == BN_CLICKED) {
HWND hWndList = GetDlgItem(hDlg, IDC_LIST1);
HWND hWndEdit = GetDlgItem(hDlg, IDC_EDIT1);
int posForEdit = (int)SendMessage(hWndList, LB_GETCURSEL, 0, 0);
SendMessage(hWndList, LB_DELETESTRING, posForEdit, NULL);
TCHAR arr[11], mess[11];
int count = (int)SendMessage(hWndEdit, EM_GETLINE, 0, (LPARAM)arr);
wsprintf(mess, " ");
memcpy(mess, arr, count);
SendMessage(hWndList, LB_INSERTSTRING, posForEdit, (LPARAM)mess);
SetFocus(hWndList);
return TRUE;
}
break;
};
case WM_CLOSE:{
PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
return TRUE;
};
}
return FALSE;
}
3.2.2 Результаты работы программы
Результат работы программы изображен на рисунках 3.1 и 3.2.
Рисунок 3.1 – Результат работы программы
Рисунок 3.2 – Результат работы программы
Выводы
В ходе лабораторной работы я изучил способы создания элементов управления, различных классов, на главном окне программы. Получил практические навыки использования файла ресурсов и диалоговых окон.