· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.HEAP —› Проблема с окнами в MSVC++

Посл.отвђт Сообщенiе


Дата: Сен 20, 2003 06:42:31 · Поправил: profi_r

Здравствуйте все!
Я понимаю, что вопрос не полностью подходит к тематике форума, но к сожалению из-за глюков инета открывается только ваш сайт и несколько других.
У меня такой вопрос: у меня стоит MS Visual C++ 6.0 без патчей и т.п. Я на него перешол примерно неделю назад. Мне тут в универе дали задание с помошью алгоритмов ЦДА и Брезенхема нарисовать линии. Я хочу создать пустое окошко и там рисовать, НО у меня никак не получается его создать. Как ни странно примерно то же самое работает на MASM8 без всяких проблем. А на С++ CreateWindowEx возвращает ошибку - типа чето ему в классе не нравиться. Мож кто поможет. Вот код:

char *szPaintClass="PaintWin";
....
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hWnd;
WNDCLASSEX wc;
MSG msg;

hInst=hInstance;
HWND hwndDlg = CreateDialogParam(hInstance, MAKEINTRESOURCE(ID_MyDialog), NULL, (DLGPROC)DialogProc, NULL);
if (hwndDlg == 0) return -1;

wc.cbSize = sizeof(wc);
wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC) WndProcPaint;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = szPaintClass;
wc.hIcon = NULL;
wc.hIconSm = NULL;

RegisterClassEx(&wc);
hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,szPaintClass,0,WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
10,10,100,100,hwndDlg,(HMENU)ID_PAINTWIN,hInst,NULL);
if (hWnd!=0){
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
}

while(GetMessage( &msg, NULL, 0x00, 0x00))
{
if(!IsDialogMessage(hwndDlg, &msg)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}


Дата: Сен 20, 2003 07:06:59

Скорее всего ему стили не нравятся или меню в ресурсах не правильно объявлено. Да и вообще какое у кнопки меню может быть?

ЗЫ: А почему бы эту программу не написать на ассемблере? Я так уже не раз делал. Даже курсовик по Технологиям Разработки Программных Систем 8-P


Дата: Сен 20, 2003 07:20:35

Black_mirror
Да и вообще какое у кнопки меню может быть?
Судя по коду, это вовсе не кнопка. BS_DEFPUSHBUTTON не должен вас смущать :)

И не меню там, а идентификатор дочернего окна.

profi_r
Только дебаггером. Может RegisterClassEx не пашет?


Дата: Сен 20, 2003 10:15:41

Может RegisterClassEx не пашет?
RegisterClassEx пашет. Если данное окно прицепить к обычному то оно появляется. Правда, ввиду отсутсвия файла ресурсов, от меню пришлось отказаться.


Дата: Сен 20, 2003 11:54:20

install sp5 for vs6.


Дата: Сен 20, 2003 12:05:12

profi_r

Я избавляюсь от такого очень просто

GetLastError от каждой функции
Или в VS
пишите в отладке окне переменных
@err и он показывает

Потом утилита ErrorLookup и смотрите..

И всё ОК.


Дата: Сен 20, 2003 14:04:28

Black_mirror, я бы написал на асме, но мне надо побыстрее это сделать.

Я знаю точно, что это не касяк сишки - это чтото с ресурсами или он не хочет обычное окно прицеплять к диалоговому. А вобще мне надо просто на диалоге приляпать пустое окно, чтоб в нем рисовать. Если кто знает подскажите как такое написать. Можно с использованием MFC.
Вот исходник, который я крутил...

461069122__LinesDraw.rar


Дата: Сен 20, 2003 16:58:18

На диалоге (используя редактор ресурсов) кинь обычную кнопку - сделай ей "Owner draw" стиль - а потом 'сядь' на WM_DRAWITEM в процедуре диалога и рисуй, что нужно. Если данные для рисунка меняются - вызывать InvalidateRect() на эту кнопку.


Дата: Сен 20, 2003 20:36:58

AsmGuru62
кинь обычную кнопку
или статик.

Black_mirror
Правда, ввиду отсутсвия файла ресурсов, от меню пришлось отказаться
Какое меню? Не видать там никакого меню.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.078