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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2016, 23:32   #1
Jaxmackey
Новичок
Джуниор
 
Регистрация: 09.11.2016
Сообщений: 1
По умолчанию Не получается послать сообщение ListView

Привет всем! Очень хочу чтобы вы мне помогли с этой проблемой. Я пытаюсь реализовать ListView не в диалоговом окне а в основном.
Вот и сам код

Код:
#include <windows.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <errno.h>
#include "resource.h"
#include <commctrl.h>

LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
char szWinName[] = "Мое окно";  /* Имя класса окна */
HINSTANCE hInst;
HWND hdwnd;

/*****************/
static HWND hList = NULL;  // List View identifier
LVCOLUMN LvCol; // Make Coluom struct for ListView
LVITEM LvItem;  // ListView Item struct
LV_DISPINFO lvd;
MSG msg;
/********************/
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
{
	HWND hwnd;
	MSG msg;
	WNDCLASS wcl;
	////////////////////////
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwICC = ICC_LISTVIEW_CLASSES;
	InitCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
	BOOL bRet = InitCommonControlsEx(&InitCtrls);
	/////////////////////////


	/*Определить класс окна*/
	wcl.hInstance = hThisInst;                        /*дескриптор данного приложения*/
	wcl.lpszClassName = szWinName;                    /*имя класса окна*/
	wcl.lpfnWndProc = WindowFunc;                     /*функция окна*/
	wcl.style = 0;                                    /*стиль по умолчанию*/
	wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);       /*стандартная иконка*/
	wcl.hCursor = LoadCursor(NULL, IDC_ARROW);         /*стандартный курсор*/
	wcl.lpszMenuName = "MYMENU";                        /*без меню*/
	wcl.cbClsExtra = 0;                               /*без дополнительной*/
	wcl.cbWndExtra = 0;                               /*информации*/

													  /*заполнение окна белым цветом*/
	wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

	/*Зарегистрировать класс окна*/
	if (!RegisterClass(&wcl))
		return 0;

	/*Создать окно*/
	hwnd = CreateWindow(szWinName,                             /*имя класса*/
		"Демонстрация окон сообщений",          /*заголовок*/
		WS_OVERLAPPEDWINDOW,	                  /*стиль окна*/
		CW_USEDEFAULT,	                      /*Х-координата, определяется Windows*/
		CW_USEDEFAULT,	                      /*Y-координата, определяется Windows*/
		CW_USEDEFAULT,	                      /*ширина, определяется Windows*/
		CW_USEDEFAULT,	                      /*высота, определяется Windows*/
		HWND_DESKTOP,	                          /*нет родительского окна*/
		NULL,			                          /*нет меню*/
		hThisInst,			                  /*дескриптор приложения*/
		NULL);			                      /*без дополнительных элементов*/

											  /*Показать окно и перерисовать содержимое*/
	ShowWindow(hwnd, nWinMode);
	UpdateWindow(hwnd);

	/*Запустить цикл обработки сообщений*/
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);                  /*Разрешить использование клавиатуры*/
		DispatchMessage(&msg);		              /*Вернуть управление Windows*/
	}
	return msg.wParam;
}


int response;
enum pf_mode { pf_pause, pf_cls };
enum rec_st { st_normal, st_deleted };
enum ins_mode { in_before, in_after };

struct rec_base
{
	char name[50];
	char code[15];
	char ed_izm[10];
	char call[10];
	char prise[30];
	char data[12];
}const_spec, *pt_spec, sort;
char init_dialog_mes[50];
int base;
int i = 0;
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT paintstruct;
	RECT rcClient;                      
	HWND LIST;
	GetClientRect(hwnd, &rcClient);
	switch (message)
	{
	case WM_CREATE:
	{
		LIST = CreateWindow(WC_LISTVIEW, "", WS_CHILD | WS_VSCROLL | WS_BORDER | WS_VISIBLE | LBS_SORT, 150, 10, 530, 355, hwnd, HMENU(IDM_CODE_SAMPLES), NULL, NULL);
		UpdateWindow(hwnd);
	}
		break;
	case WM_INITDIALOG:
	{
		InitCommonControls();
		hList = GetDlgItem(LIST, IDM_CODE_SAMPLES); // get the ID of the ListView
		SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&LvCol); // Insert/Show the coloum
		LvCol.pszText = "Код";
		ShowWindow(hwnd, SW_NORMAL);
		UpdateWindow(hwnd);
	}
	break;
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		        case IDM_1:
		        {
			         strcpy(init_dialog_mes, "Наименование товара");
			         DialogBox(hInst, "MYDB", hwnd, (DLGPROC)DialogFunc);
		        }
		        break;
		        case IDM_3:
		        {
			         strcpy(init_dialog_mes, "Выборка по названию товара");
			         DialogBox(hInst, "MYDB3", hwnd, (DLGPROC)Dialog3Func);
		        }
		        break;
				case IDM_10:
				{
					hdc = GetDC(hwnd);
					TextOut(hdc, 1, 1, "123878787878", 8);
					ReleaseDC(hwnd, hdc);
				}
				break;
	    }
		break;
	case WM_DESTROY:                /*завершение программы*/
		PostQuitMessage(0);
		break;
	default:
		/*Все сообщения, не обрабатываемые в данной функции, направляются на обработку по умолчанию*/
		return DefWindowProc(hwnd, message, wParam, lParam);
	}
	return 0;
}
Вопрос именно по этому участку если кто не понял.
Код:
case WM_CREATE:
	{
		LIST = CreateWindow(WC_LISTVIEW, "", WS_CHILD | WS_VSCROLL | WS_BORDER | WS_VISIBLE | LBS_SORT, 150, 10, 530, 355, hwnd, HMENU(IDM_CODE_SAMPLES), NULL, NULL);
		UpdateWindow(hwnd);
	}
		break;
	case WM_INITDIALOG:
	{
		InitCommonControls();
		hList = GetDlgItem(LIST, IDM_CODE_SAMPLES); // get the ID of the ListView
		SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&LvCol); // Insert/Show the coloum
		LvCol.pszText = "Код";
		ShowWindow(hwnd, SW_NORMAL);
		UpdateWindow(hwnd);
	}
	break;
почему не получается послать сообщение ListView.. окно списка постоянно пустое.. Помогите! Очень прошу!

Может я что то не так вызываю.. объясните пжлст

Последний раз редактировалось Jaxmackey; 10.11.2016 в 00:02.
Jaxmackey вне форума Ответить с цитированием
Старый 10.11.2016, 09:42   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Код:
SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&LvCol); 
LvCol.pszText = "Код";
Вопрос, что содержит pszText в момент отправки сообщения?
Далее, вы уверены, что достаточно заполнить только pszText? Почитайте про поле mask.
Заведите привычки проверять что вам возвращают функции.
Научитесь пользоваться отладчиком - без этого никуда.
waleri вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Послать сообщение другому пользователю в системе XaTTa6bI4 Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 7 27.04.2013 15:52
послать сообщение ListView. VintProg Общие вопросы Delphi 1 19.11.2011 11:24
Послать сообщение бесформенной проге. TwiX Общие вопросы Delphi 3 16.04.2010 17:05
послать сообщение кнопке Fireleo Win Api 7 06.08.2007 11:14