Добрый день. Столкнулся с проблемой. При нажатии левой кнопкой мыши 2 на строку Листбокса не открывается окно. Ошибки не выдает, а код взят у преподавателя. Буду благодарен за помощь и прилагаю весь код. Проблемный код выделил красным цветом.
Код:
#include <windows.h>
#include <iostream>
#include <stdio.h>
using namespace std;
#define ID_BUTTON_1 3000
#define ID_BUTTON_2 3001
#define ID_BUTTON_3 3002
#define LISTBOX 1
HWND hBtn1;
HWND hBtn2;
HWND hBtn3;
HWND hLd;
int nomstr;
HWND hCd;
HINSTANCE hInst;
WNDCLASS wc; // Структура для информации о классе окна
// Дескриптор главного окна приложения
MSG msg; // Структура для хранения сообщения
LRESULT CALLBACK WndProc (HWND , UINT , WPARAM , LPARAM );
int WINAPI WinMain( HINSTANCE hInstance, //дескриптор экземпляра приложения
HINSTANCE hPrevInstance, // дескриптор предыдущего экземпляра приложения
LPSTR lpszCmdLine, //указатель на параметры командной строки
int nCommandShow // константа, характеризующая начальный вид окна
) {
HWND hWnd;
hInst=hInstance;
memset(&wc, 0, sizeof(wc));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor= LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName= "ProcesesMenu";
wc.lpszClassName = "IndClass";
RegisterClass(&wc);
int width = 800, heigth = 500;
hWnd = CreateWindowEx(0,wc.lpszClassName, "Process Demo",WS_OVERLAPPEDWINDOW | WS_VSCROLL,CW_USEDEFAULT, CW_USEDEFAULT,width,heigth,NULL, NULL,hInst, NULL); // и т.д.
if (!hWnd) {
MessageBox(NULL, "Cannot create main window", "Error", MB_OK);
return 0;
}
hBtn1 = CreateWindowEx(0,"BUTTON", "Логические диски", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 100, 45, 150, 50, hWnd, (HMENU)ID_BUTTON_1, hInst, NULL);
hBtn2 = CreateWindowEx(0,"BUTTON", "Список дисков", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 300, 45, 150, 50, hWnd, (HMENU)ID_BUTTON_2, hInst, NULL);
hBtn2 = CreateWindowEx(0,"BUTTON", "Выход из программы", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 500, 45, 150, 50, hWnd, (HMENU)ID_BUTTON_3, hInst, NULL);
ShowWindow(hWnd, nCommandShow);
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) {
switch (msg) {
case WM_COMMAND:{
switch(wParam){
case ID_BUTTON_1:
hLd = CreateWindowEx(0,"STATIC", "Конфигурация дисков", WS_CHILD|WS_OVERLAPPEDWINDOW |LBS_EXTENDEDSEL| WS_CAPTION | WS_VISIBLE|WS_BORDER , 0, 0, 250, 250, hWnd, NULL, hInst, NULL);
break;
case ID_BUTTON_3:
PostQuitMessage(0);
break;
}
switch(wParam){
case ID_BUTTON_2:
hCd = CreateWindowEx(0,"LISTBOX", "Данные по дискам", WS_CHILD| WS_VISIBLE| LBS_STANDARD , CW_USEDEFAULT, CW_USEDEFAULT, 100, 100, hWnd, (HMENU)LISTBOX, hInst, NULL);
int n;
char dd[4];
DWORD dr = GetLogicalDrives();
for (int i = 0;i<26;i++)
{
n=((dr>>i)&0x00000001);
if(n==1)
{
dd[0]=char(65+i); dd[1]=':'; dd[2]='\\'; dd[3]=0;
SendMessage(hCd, LB_ADDSTRING, 0, (LPARAM) dd);
}
}
switch (LOWORD(wParam))
{
case LISTBOX:
{
if (HIWORD(wParam) == LBN_DBLCLK)
{
nomstr = (int)SendMessage(hCd, LB_GETCURSEL,0,0);
if (nomstr!=LB_ERR)
{
CreateWindowEx(0, "STATIC", "Информация о диске", WS_VISIBLE|WS_CAPTION|WS_POPUPWINDOW|SS_WHITERECT, 250,200,250,180,hWnd,NULL,NULL,NULL);
}
}
}
break;
}
}
}
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}