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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2012, 13:46   #1
Starget-93
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 11
Восклицание Подправить программу.

Написать программу, в которой используется диалог для работы со структурами данных, определяющими списки. Ввод элементов данных осуществляется с помощью окна редактирования EditBox. Состояние списка выводится в окно списка ListBox. Элемент списка удаляется, если по нему дважды щелкнуть курсором мыши. Вид структурs данных: очередь. Тип данных элементов: int. Вид диалога: модальный.
Файл list.cpp:
Код HTML:
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include "list.h"
#include <stdlib.h>
using namespace std;
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);  //оконная функция
BOOL CALLBACK DialogFunc   (HWND,UINT,WPARAM,LPARAM);	// диалог
char szWinName[] = "Lists";
HINSTANCE hInst;
char str[80];
  char st[80];
int i=1;
struct slink {int e; slink *next;};
slink* list1=NULL;	// очередь
// запись нового элемента в очередь
slink *insert( slink *lst, int a)
{
  slink *prev=lst, *p= new slink;
  p->e = a;
  p->next = NULL;
  if(lst==NULL) return p;
  while(lst->next!=NULL)
  {
    lst =lst->next;
  }
  lst->next = p;
  return prev;
}
//удаление первого элемента из очереди
slink *del( slink *lst)
{
  slink *p=lst;
  if(lst)
  {
    	lst = lst->next; delete p;
  }
  return lst;
}
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevinst,
	LPSTR lpszArgs, int nWinMode)
{
  HWND hwnd;
  MSG msg;
  WNDCLASS wcl;
  HACCEL hAccel;
  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,
	"Dialogs",
	WS_OVERLAPPEDWINDOW,
	CW_USEDEFAULT,
	CW_USEDEFAULT,
	CW_USEDEFAULT,
	CW_USEDEFAULT,
	HWND_DESKTOP,
	NULL,
	hThisInst,
	NULL);
  hInst = hThisInst;
  hAccel = LoadAccelerators(hThisInst,"MYMENU");//подключим акселераторы
  ShowWindow(hwnd,nWinMode); //отобразить окно
  UpdateWindow(hwnd);
// обработка горячих клавиш
  while(GetMessage(&msg,NULL,0,0))
  {
    if(!TranslateAccelerator(hwnd,hAccel,&msg))
    {
      	TranslateMessage(&msg);
		DispatchMessage(&msg);
    }
  }
  return msg.wParam;
}
LRESULT CALLBACK WindowFunc(HWND hwnd,
	UINT message,
	WPARAM wParam,
	LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT paintstruct;
  static TEXTMETRIC tm;
  SIZE size;
  int str1;
  switch(message)
  {
    case WM_COMMAND:
      switch (LOWORD (wParam))
	{
        case IDM_DIALOG:
	    	DialogBox(hInst,"MYDB",hwnd, (DLGPROC)DialogFunc);
	    	break;

	  case IDM_HELP:
	    MessageBox(hwnd,"\nПосле ввода данных"
       "\n в окно редактирования нажмите на клавишу ENTER или"
       "\n на кнопку Ввод","Help",MB_OK);
	    break;
	}
	break;
    case WM_DESTROY:
		PostQuitMessage(0);	    //сообщение о завершении
		break;
    default:				    //обработка остальных сообщений
	return DefWindowProc(hwnd,message,wParam,lParam);
  }
  return 0;
}
BOOL CALLBACK DialogFunc(HWND hdwnd,
	UINT message,
	WPARAM wParam,
	LPARAM lParam)
{
  long i;
  slink* lst_tmp;
  switch(message)
  {
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
                case IDCANCEL:
                EndDialog(hdwnd,0);
                return 1;
			
                case ID_LB1:
                        if(HIWORD(wParam)==LBN_DBLCLK)
                        {
                                i = SendDlgItemMessage(hdwnd,ID_LB1,LB_GETCURSEL,0,0L);
                                sprintf(str,"Индекс выбранного элемента = %d",i);
                                MessageBox(hdwnd,str,"Выбор сделан",MB_OK);
                        }
			return 1;

                case IDOK:
                        GetDlgItemText(hdwnd, ID_EB1, str,80);

                        if ((strlen(str)&& atoi(str))||*str=='0')
                        {
                                list1 = insert(list1,atoi(str));
                                SendDlgItemMessage(hdwnd, ID_LB1, LB_ADDSTRING,0,(LPARAM)str);
                        }
			return 1;

                case ID_DEL:
                        list1=del(list1);
                        SendDlgItemMessage(hdwnd, ID_LB1, LB_DELETESTRING ,0,(LPARAM)str);
			return 1;

        }
    return 1;

    case WM_INITDIALOG:
        lst_tmp = list1;
        while (lst_tmp!=NULL)
        {
                itoa(lst_tmp->e,st,10);
                SendDlgItemMessage(hdwnd, ID_LB1,LB_ADDSTRING,0,(LPARAM)st);
        	lst_tmp = lst_tmp->next;
        } ;
    return 1;
  }
  return 0;
}
(Остальные файлы в архиве).
Необходимо поменять вид диалога с модального на немодальный. Что нужно изменить в коде ?
Вложения
Тип файла: rar lab2.rar (206.8 Кб, 9 просмотров)
Starget-93 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подправить программу с матрицой! roman936 Общие вопросы Delphi 2 16.12.2009 20:14
Delphi(подправить написанную программу) Квио Общие вопросы Delphi 1 23.09.2009 08:02
помогите подправить программу Deniska112 Общие вопросы C/C++ 6 25.06.2009 15:04
надо бы подправить программу)) Fylhtq Паскаль, Turbo Pascal, PascalABC.NET 3 19.05.2009 19:55
Можете подправить программу??? Срочно надо Fylhtq Паскаль, Turbo Pascal, PascalABC.NET 0 06.01.2009 10:56