Создал окно программы с пунктами и подпунктами. Каким образом можно оживить Кнопки? Например как сделать чтобы по нажатию на "Файл">"Выход" программа закрывалась? Я в этом очень плохо что понимаю, скорее даже ничего...
#include "stdafx.h"
#include <windows.h>
#include <CommCtrl.h>
#define IDM_SHOW 1001
#define IDM_ERASE 1002
#define IDM_EXIT 1003
#pragma comment(lib, "ComCtl32.lib")
TCHAR czClassName[] = L"myClass";
TCHAR czFormName[] = L"Это мое окно";
HWND hwndA;
const WCHAR wString[] = L"Hello";
#define countof(a) (sizeof(a)/sizeof(*(a)))
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDeviceContext;
PAINTSTRUCT paintStruct;
RECT rectPlace;
HFONT hFont;
static char text[2] = { ' ','\0' };
switch (message)
{
case WM_COMMAND:
if (HIWORD(wParam) == 0 && lParam == 0) { // If a menu item has been selected
switch (LOWORD(wParam)) {
case IDM_SHOW:
MessageBox(NULL,
L"Покулитый Руслан",
L"121-18ск-1", MB_ICONASTERISK | MB_OK);
break;
case IDM_ERASE:
::SendMessage(hwnd, WM_CLOSE, 0, 0);
break;
case IDM_EXIT:
PostQuitMessage(0);
break;
}
break;
default: return DefWindowProc(hwnd, message, wParam, lParam); break;
}
}
}
ATOM myRegistryClass(HINSTANCE hInst, int cmdMode)
{
WNDCLASS cw;
cw.style = CS_VREDRAW | CS_HREDRAW;
cw.cbClsExtra = 0;
cw.cbWndExtra = 0;
cw.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2);
cw.hCursor = LoadCursor(NULL, IDC_ARROW);
cw.hIcon = LoadIcon(NULL, IDI_APPLICATION);
cw.hInstance = hInst;
cw.lpfnWndProc = WndProc;
cw.lpszClassName = czClassName;
cw.lpszMenuName = NULL;
RegisterClass(&cw);
return 0;
}
BOOL InitInstance(HINSTANCE hInst, int Mode)
{
hwndA = CreateWindow(
czClassName,
czFormName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInst,
NULL);
ShowWindow(hwndA, Mode);
UpdateWindow(hwndA);
return TRUE;
}
/*Главная функция*/
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int cmdShow)
{
MSG msg;
myRegistryClass(hInst, cmdShow);
InitInstance(hInst, cmdShow);
InitCommonControls();
/*Создание строки состояния*/
HWND hStatusWindow = CreateStatusWindow(WS_CHILD | WS_VISIBLE, L"", hwndA, 5000);
HMENU hmenu1;
hmenu1 = CreateMenu();
HMENU hMainMenu = CreateMenu();
HMENU hPopMenuFile = CreatePopupMenu();
HMENU hPopMenuPravka = CreatePopupMenu();
HMENU hPopMenuPomosh = CreatePopupMenu();
AppendMenu(hMainMenu, MF_STRING | MF_POPUP, (UINT)hPopMenuFile, L"Файл");
AppendMenu(hMainMenu, MF_STRING | MF_POPUP, (UINT)hPopMenuPravka, L"Правка");
AppendMenu(hMainMenu, MF_STRING | MF_POPUP, (UINT)hPopMenuPomosh, L"Помощь");
AppendMenu(hPopMenuFile, MF_STRING, 1001, L"Показать");
AppendMenu(hPopMenuFile, MF_STRING, 1003, L"Выход");
AppendMenu(hPopMenuPravka, MF_STRING, 1002, L"Стереть");
SetMenu(hwndA, hMainMenu);
SetMenu(hwndA, hPopMenuFile);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
Во-первых, у вас ошибка в AppendMenu - две разные команды имеют один и тот же идентификатор 1001.
Во-вторых, меню, акселераторы, кнопки, и прочие экранные элементы при активации генерируют сообщение WM_COMMAND. Для обработки команд меню в вашу оконную процедуру надо добавить примерно такой код (я добавил символьные идентификаторы для ваших команд):
#define IDM_SHOW 1001
#define IDM_ERASE 1002
#define IDM_EXIT 1003
switch (message) {
. . .
case WM_COMMAND:
if (HIWORD(wParam) == 0 && lParam == 0) { // If a menu item has been selected
switch (LOWORD(wParam)) {
case IDM_SHOW:
. . .
break;
case IDM_ERASE:
. . .
break;
case IDM_EXIT:
::SendMessage(hwnd, WM_CLOSE, 0, 0);
break;
}
}
break;
Виртуальный выделенный сервер (VDS) становится отличным выбором
код должен отсеивать все элементы массива не входящие в границы [a b], массив сжимается, все не вошедшие элементы к нулю и вправо, выдает неправильный...
Пытаюсь прочитать через i2c eeprom память m24sr04 (Dynamic NFC/RFID tag IC with 4-Kbit EEPROM)Предварительно записал в тэг с помощью NFC некоторую информацию
Не очень понимаю, почему следующий код выводит 0 1 0Какие типы у foo_1, foo_2 и foo_3?
Вообщем вот фрагмент кода, код себя ведет не очень понятно, все как бы хорошо, но иконка не меняется при наступлении 19 часов(а так должно быть)