2013-05-03 1 views
0

У меня есть этот конкретный вопрос при программировании приложения win32 для интернет-магазина в C++, но я не уверен, если я могу объяснить это нормально:выиграть 32 программирования C++

Я это class Product{};, что предполагается провести (тип, имя, цена, количество) для каждого уникального продукта в магазине (я написал его как обычный класс и не уверен, что мне нужно писать как класс mfc?). И я сделаю вектор, содержащий все доступные объекты (продукты) в магазине.

Идея состоит в том, чтобы иметь профиль администратора, которому разрешено добавлять новые продукты и удалять их. Поэтому я хочу получить эту информацию из тех редакторов, где он будет вводить данные и сохранять эти данные в класс. Проблема в том, что я не знаю, какую функцию использовать для получения информации из диалогового окна интерфейса. Я пробовал с GetDlgItemText и SetDlgItemText (SendDlgMessage), но возвращаемый тип - int, так что, я думаю, это что-то еще, что я должен использовать?

INT_PTR CALLBACK Seller(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
UNREFERENCED_PARAMETER(lParam); 
switch (message) 

{ 
case WM_INITDIALOG: 
    return (INT_PTR)TRUE; 

case WM_COMMAND: 
    switch (LOWORD(wParam)) 
    { 
    case IDC_BUTTON1: { 
     Product obj; 
     GetDlgItemText(hDlg,IDC_EDIT3|IDC_EDIT2,text,20); 
      SendDlgItemMessage(hDlg,obj.SetType(text),LB_ADDSTRING,0,(long)text); 

EDIT:

Я забыл упомянуть, что третий формальный параметр «текст» на самом деле глобальная переменная буфер, где хранить информацию из пункта DLG :) так ФАКТИЧЕСКИ Моя проблема заключается в том, что с отправкой информация от буфера tthe до объекта класса Продукт

EDIT2: Я понял. Idon't нужна функция SendDlgItemMessage на первом месте, так как я хочу сохранить информацию в векторе. Просто будет использовать функцию сеттер классного продукта, а затем непосредственно push_back объект типа продукта в векторе

+3

Почему вы делаете свою жизнь более сложной, написав ее в Win32 вместо использования графического интерфейса? Это ваш код, а не наследуемая кодовая база, не так ли? – Devolus

+0

@Devolus: Почему бы и нет? – Xearinox

+2

Потому что его сложность и склонность к ошибкам. Это не плохо, как учебный опыт, если вы хотите узнать о внутренней работе Windows, но я бы никогда не сделал этого для бизнес-проекта. В этих библиотеках GUI есть тонны вспомогательных классов, которые упрощают вашу жизнь, а код легче поддерживать. – Devolus

ответ

0

Посмотрите здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645489%28v=vs.85%29.aspx

Ваш текст должен быть в «тексте» и ReturnValue является размер строка, возвращаемая GetDlgitemText.

Однако я бы настоятельно рекомендовал использовать стандартную библиотеку типа wx или qt, что значительно облегчает жизнь.

1

Посмотрите на странице MSDN для GetDlgItemText и воспользоваться моментом, чтобы изучить его, особенно параметров и Возвращаемое значение секции. Обратите внимание, что третий аргумент, lpString, помечен как выход (_Out_ или [out] в документации). Вы предоставляете буфер, в котором будет сохранен текст из элемента диалога, и он хранится там. Возвращаемое значение функции используется для указания того, сколько символов было фактически сохранено.

+0

хорошо проблема с SendDlgMessage, я знаком с функцией Get.Я забыл упомянуть, что третий формальный параметр «текст» на самом деле является глобальной буферной переменной, где я храню информацию из элемента dlg :) – user2272017

+0

Вы имеете в виду [SendDlgItemMessage] (http://msdn.microsoft.com/en-us/ библиотека/окно/настольный/ms645515% 2 = vs.85% 29.aspx)? В этом случае сообщение, которое вы хотите отправить, - [WM_GETTEXT] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632627%28v=vs.85%29.aspx). Как говорится в документации для этого сообщения, сделайте 'wParam' максимальный размер буфера и сделайте' lParam' указателем на буфер. –

+0

yep точно спасибо Я попробую – user2272017