Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2016, 18:16   #1
Dark_Tarakan
Новичок
Джуниор
 
Регистрация: 19.10.2016
Сообщений: 2
По умолчанию Открытие окна при нажатии на строку листбокса

Добрый день. Столкнулся с проблемой. При нажатии левой кнопкой мыши 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);
	
		}
Dark_Tarakan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие модального окна при нажатии на ссылку ~>>>Dron<<<~ JavaScript, Ajax 2 09.04.2015 08:02
Открытие определенной записи из другой формы при нажатии кнопки Мария007007 Microsoft Office Access 2 31.01.2014 17:25
Открытие текста при нажатии на ссылку moondor HTML и CSS 2 27.03.2011 19:29
Как при нажатии на строку в Listbox передавать нажатую строку в переменную Михаил Юрьевич Общие вопросы Delphi 5 16.03.2009 12:59
Открытие нового окна, при нажатии на кнопку(Delphi). sergey31 Помощь студентам 2 24.05.2008 14:48