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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2009, 17:47   #1
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию создание окошка и кнопочки в нем

добрый день, вот зделал я программу и решил как то немнога увеличить красоту, копался в интернете, находил как создавать окошки, но вот как создать кнопочку и 2 строки (одна для ввода, другая для вывода, для ввода - будет принимать не более 30 символов, для вывода - будет выводить не более 10000 символов) я не пойму, все бился - бился и уже почти зделал кнопку, но там ошибка конвертирования, покажу код и ошибку
Код:
#include <windows.h>


LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nCmdShow)
{
    HWND hwnd;
    MSG msg;
    WNDCLASS WndClass;
    memset(&WndClass,0,sizeof(WNDCLASS));
    
    WndClass.style            = CS_HREDRAW | CS_VREDRAW;
    WndClass.lpfnWndProc    = WndProc;
    WndClass.hInstance        = hInstance;
    WndClass.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.lpszClassName    = "Lab";
    RegisterClass(&WndClass);
    
    hwnd = CreateWindow("Lab","Info ID's", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
                        100,100,500,500, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
	static char hwndButton[1];
    switch (Message){
		hwndButton = CreateWindow("BUTTON", "OK", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
	20,40,400,35,hwnd,NULL,((LPCREATESTRUCT) lparam) -> hInstance,NULL);      // pointer not needed
    case WM_DESTROY: 
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, Message, wparam, lparam);
    }
    return 0;
}
ошибка
Цитата:
error C2440: '=' : cannot convert from 'struct HWND__ *' to 'char [1]'
There are no conversions to array types, although there are conversions to references or pointers to arrays
подскажите что вообще делать и какие дальше шаги осуществлять?
Olejik вне форума Ответить с цитированием
Старый 28.09.2009, 17:50   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Что это такое?
Код:
static char hwndButton[1];
С какого счастья там массив char да еще и из одного элемента?
Может так лучше будет?
Код:
static HWND hwndButton;
pu4koff вне форума Ответить с цитированием
Старый 28.09.2009, 18:25   #3
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Что это такое?
Код:
static char hwndButton[1];
С какого счастья там массив char да еще и из одного элемента?
Может так лучше будет?
Код:
static HWND hwndButton;
да...точно...исправил и эта ошибка пропала, а теперь появилась еще 2:
Цитата:
error LNK2001: unresolved external symbol _main
Цитата:
fatal error LNK1120: 1 unresolved externals
Olejik вне форума Ответить с цитированием
Старый 28.09.2009, 18:35   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Надо было создавать не консольное приложение, а виндовое. Полазай в свойствах проекта, по любому это где-то меняется.
pu4koff вне форума Ответить с цитированием
Старый 28.09.2009, 19:22   #5
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Надо было создавать не консольное приложение, а виндовое. Полазай в свойствах проекта, по любому это где-то меняется.
блин, а думал что я вин32 аппликэйштон зделал, ну я переделал его, создал аппликэйшион, но только у меня не появилась кнопка (

ой, все, просто в код добавил
Код:
case WM_CREATE:
во второй функции перед созданием кнопки ))
только я не знаю как зделать, чотбы окошко сразу не закрывалось, перед ретурном ставил getch() и запись цифры введенной с клавиатуры scanf("%d", &a);
как зделать, чтобы окошко не убиралось до того времени, пока я не нажму крестик?

зделал я задержку, добавил return 0; после case WM_CREATE, но только почему то у меня не создается окошко, ну не окошко,а строка, куда вписывать буду массив, вот мой код:
Код:
#include <windows.h>
#include <conio.h>
#include <stdio.h>


LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nCmdShow)
{
    HWND hwnd;
    MSG msg;
    WNDCLASS WndClass;
    memset(&WndClass,0,sizeof(WNDCLASS));
    
    WndClass.style            = CS_HREDRAW | CS_VREDRAW;
    WndClass.lpfnWndProc    = WndProc;
    WndClass.hInstance        = hInstance;
    WndClass.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.lpszClassName    = "Lab";
    RegisterClass(&WndClass);
    
    hwnd = CreateWindow("Lab","Info ID's", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
                        300,300,700,500, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
	static int i;
	static HWND hwndButton;
	static HWND hmwndButton;
    switch (Message){
	case WM_CREATE:
		{
			/*СОЗДАЕМ КНОПОЧКУ:ok*/
		hwndButton = CreateWindow("BUTTON", "OK", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
	580,400,100,35,hwnd,NULL,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
		/*СОЗДАЕМ СТРОКУ ДЛЯ ВВОДА ID's*/
		hmwndButton - CreateWindow("edit",NULL,
			WS_CHILD | WS_VISIBLE | SS_RIGHT,
			20,33,100,17,hwnd,(HMENU)40,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
		}
		i = 0;
		return 0;
	case WM_KEYDOWN:
		{
			if ((LOWORD(wparam) == 13))
			{
				getch();
			}
			i++;
		}
    case WM_DESTROY: 
        PostQuitMessage(0);
        //break;
    default:
        return DefWindowProc(hwnd, Message, wparam, lparam);
    }
    return 0;
}
помогите пожалуйста, совсем немнога осталось (

а, все, зделал, просто поменял
Код:
WndClass.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);
на
Код:
WndClass.hbrBackground    = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
извините за беспокойсвто )

Последний раз редактировалось Stilet; 29.09.2009 в 16:57.
Olejik вне форума Ответить с цитированием
Старый 28.09.2009, 22:09   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Добавьте стиль WS_BORDER, чтобы была граница вокруг эдита:
Код:
hmwndButton - CreateWindow("edit",NULL,
			WS_CHILD | WS_VISIBLE | WS_BORDER | SS_RIGHT,
			20,33,100,17,hwnd,(HMENU)40,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
netrino вне форума Ответить с цитированием
Старый 28.09.2009, 22:41   #7
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Добавьте стиль WS_BORDER, чтобы была граница вокруг эдита:
Код:
hmwndButton - CreateWindow("edit",NULL,
			WS_CHILD | WS_VISIBLE | WS_BORDER | SS_RIGHT,
			20,33,100,17,hwnd,(HMENU)40,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
спасибо,и в правду красиво ))

еще раз всем привет, не хотел создавать новую тему, рискну сюда написать, авось и ответят :P
я вот опять с окошками завист, у меня парочку вопросов опять появилось, вот например, создаю дочернее окошко:
Код:
		hmwndSystem = CreateWindow("edit",NULL, WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER,
			460,100,200,300,hwnd,(HMENU)i,NULL,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
мне надо сюда например написать: "Hello"
я заметил что есть две функции: SetFocus и SetWindowText
вот подскажите, ими надо пользоваться? Если да, то как прописать, а если нет, то какими надо пользоваться?
Спасибо за внимание.

Последний раз редактировалось Stilet; 29.09.2009 в 16:57.
Olejik вне форума Ответить с цитированием
Старый 29.09.2009, 16:53   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну, во-первых, если Hello должно быть прямо при создании окна, то можно это вписать в ф-ции CreateWindow:
Код:
		hmwndSystem = CreateWindow("edit","Hello", WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER,
			460,100,200,300,hwnd,(HMENU)i,NULL,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
Ежели, так сказать рантайм, то текст можно выставить ф-цией SetWindowText:
Код:
SetWindowText(hmwndSystem, "Hello");
SetFocus даёт окну фокус
netrino вне форума Ответить с цитированием
Старый 29.09.2009, 19:14   #9
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Ну, во-первых, если Hello должно быть прямо при создании окна, то можно это вписать в ф-ции CreateWindow:
Код:
		hmwndSystem = CreateWindow("edit","Hello", WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER,
			460,100,200,300,hwnd,(HMENU)i,NULL,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
Ежели, так сказать рантайм, то текст можно выставить ф-цией SetWindowText:
Код:
SetWindowText(hmwndSystem, "Hello");
SetFocus даёт окну фокус
блиииииин, вот я дятел!!! Я так же все делал, но я писал эту строчку после return 0; ))
спасибо, а то я бы не догадался бы, до посинения бы вдуплялбы ))
но у меня еще вопросик, SetWindowText какой знак воспринимает за новую строку? А то я в одно окошечко выдаю сообщение Hello, а в другое я вывожу поочередно (с разных SetWindowText) сообщения:
"Hello\n"
"My name\n"
"is user\n"
и в окошечке я вижу только is user, как я понял там перетирает и '\n' это printf-ая фишка

Последний раз редактировалось Olejik; 29.09.2009 в 19:28.
Olejik вне форума Ответить с цитированием
Старый 30.09.2009, 17:40   #10
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

всем опять привет кто видит мое сообщение, с новыми строками я как то разобрался, ну через опу, но зделал, но я не могу передать программе сообщение, ну создается окошко, специальное для ввода строки, я туда ввожу строку и нажимаю энтер, но ни чего не происходит, хотя как я смотрю, оно должно вывести в другом окошке, делал программу пошагово, заметил что в массив ни чего не заносится, помогите пожалуйста, вот мой код, где индиго выделено, вот там и надо смотреть
Код:
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>


LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nCmdShow)
{
    HWND hwnd;
    MSG msg;
    WNDCLASS WndClass;
    memset(&WndClass,0,sizeof(WNDCLASS));
    
    WndClass.style            = CS_HREDRAW | CS_VREDRAW;			//
    WndClass.lpfnWndProc    = WndProc;								//
    WndClass.hInstance        = hInstance;							//
    WndClass.hbrBackground    = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
    WndClass.lpszClassName    = "Lab";
	WndClass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
	WndClass.cbClsExtra    = 0 ;
	WndClass.cbWndExtra    = 0 ;

    RegisterClass(&WndClass);
    
    hwnd = CreateWindow("Lab","Info ID's", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
                        300,300,700,500, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
	FILE *klass;
	FILE *npc;
	FILE *item;
	int size = 0;
	//char buf[30];
	char sysMes[100];
	static char rezult[10000];
	char searchName[30];
	static int i = 0;
	static HWND hwndButton;
	static HWND hmwndEdit;
	static HWND hmwndOut;
	static HWND hmwndSystem;
	searchName[0] = '\0';
	sysMes[0] = '\0';
    switch (Message)
	{
	case WM_CREATE:
		{
			/*СОЗДАЕМ КНОПОЧКУ:ok*/
		hwndButton = CreateWindow("BUTTON", "Искать", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_BORDER,
	500,25,100,35,hwnd,NULL,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
		/*СОЗДАЕМ СТРОКУ ДЛЯ ВВОДА ID's*/
		hmwndEdit = CreateWindow("edit",NULL,
			WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER,
			50,33,400,20,hwnd,(HMENU)1,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
		/*СОЗДАЕМ СТРОКУ ДЛЯ ВЫВОДА РЕЗУЛЬТАТА*/
		hmwndOut = CreateWindow("edit", NULL,
			//WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER | ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL,
			//WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER | ES_MULTILINE | CBS_DISABLENOSCROLL | WS_VSCROLL,
			WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE,
			50,100,400,300,hwnd,(HMENU)i,NULL,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
		/*СОЗДАЕМ ОКНО ДЛЯ СИСТЕМНЫХ СООБЩЕНИЙ*/
		hmwndSystem = CreateWindow("edit",NULL,
			WS_CHILD | WS_VISIBLE | SS_LEFT | WS_BORDER | ES_MULTILINE | CBS_DISABLENOSCROLL,
			460,100,200,300,hwnd,(HMENU)i,NULL,((LPCREATESTRUCT) lparam) -> hInstance,NULL);
		}
		if ((klass = fopen("classid.ini","r")) != NULL)
		{
			strcpy(sysMes,"File 'classid.ini' is open       ");
		}
		else
			strcpy(sysMes,"File 'classid.ini' in not open   ");
		if ((npc = fopen("npcsid.ini","r")) != NULL)
		{
			strcat(sysMes,"\n");
			strcat(sysMes,"File 'npcsid.ini' is open       ");
		}
		else
		{
			strcat(sysMes,"\n");
			strcat(sysMes,"File 'npcsid.ini' is not open  ");
		}
		if ((item = fopen("itemsID.ini","r")) != NULL)
		{
			strcat(sysMes,"\n");
			strcat(sysMes,"File 'itemsID.ini' is open     ");
		}
		else
		{
			strcat(sysMes,"\n");
			strcat(sysMes,"File 'itemsID.ini' is not open");
		}
		SetWindowText(hmwndSystem,sysMes);
		GetWindowText(hmwndEdit,searchName,30);
		SetWindowText(hmwndOut,searchName);
		return 0;
    case WM_DESTROY: 
        PostQuitMessage(0);
        return 0;
    default:
        return DefWindowProc(hwnd, Message, wparam, lparam);
    }
    return 0;
}

Последний раз редактировалось Olejik; 30.09.2009 в 17:44.
Olejik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонент DbRichEdit. Что в нем особенного? Scorpy БД в Delphi 4 05.03.2015 12:56
DBLookUpComboBox и выбор в нем yulia БД в Delphi 3 15.04.2009 16:12
кнопочки badfilin JavaScript, Ajax 2 08.04.2008 22:32
Сделать сайт и заработать на нем Pblog Обсуждение статей 0 27.05.2007 02:13
Запретить закрытие окошка формы крестиком "Х" Slim Microsoft Office Excel 5 28.03.2007 19:39