Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> Преподавание программирования
Начать новую тему   Ответить на тему   вывод темы на печать

Преподавание программирования

Автор
Сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2005.03.28 19:27.08
Ответить с цитатой
Вы создаете пустой windows проект (мы уже разбирали это для console-программы), добавляете туда модуль и помещаете то, что я написал. И все.
Посмотреть профиль Отправить личное сообщение
Гость








Статус: Offline
СообщениеДобавлено: 2005.03.28 19:43.37
Ответить с цитатой
vladislav у меня есть примеры очень простых програм, но они на визуал бэйсике вы мне поможите написать такиеже только на Си?
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.03.28 19:44.25
Ответить с цитатой
Гость это я
Посмотреть профиль Отправить личное сообщение
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2005.03.28 19:45.10
Ответить с цитатой
vladislav писал(а):
Вы создаете пустой windows проект (мы уже разбирали это для console-программы), добавляете туда модуль и помещаете то, что я написал. И все.


И нажимаете F5.

Внимательно читаете все сообщения внизу, исправляете все очепятки. И в конце-концов в каталоге с проектом получаете полноценный exe-файл. (Правда не релиз, а билдовый)

Wink
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2005.03.28 19:52.01
Ответить с цитатой
Кстати - смех смехом, а вопрос - с чего начать изучение языка, чтоб не потерять интерес - довольно сложен, ИМХО.

з.е. Процентов 50 наверное (если не больше) книг для начинающих, дальше одной-двух глав не читаются.
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.03.28 20:13.35
Ответить с цитатой
Как сделать надпись по-русски. Я создал шаблон (диалоговое окно) с кнопками, на кнопках надписи по русски, когда откомпилировал стали по английски. Как их сделать по русски?
Посмотреть профиль Отправить личное сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2005.03.28 20:24.20
Ответить с цитатой
Повидимому вы создали MFC проект. Бросьте пока этим заниматься и сделайте, что мы тут с вами обговариваем.
Посмотреть профиль Отправить личное сообщение
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.03.28 20:50.46
Ответить с цитатой
Я компилирую ваш текст которвй вы мне дали он не компилируеться выдает ошибку. Я просто думаю для начинающего сложно сразу с АPI поэтому думал надо начинать с шаблона? Лчше с API всё самому прописывать?


В вашей книге написано:

В данной главе мы дадим достаточно обширное введение в API-программы, так что читатель может в дальнейшем спокойно писать любые программы, без использования каких либо библиотек, чего ему мы категорически не рекомендуем, поскольку подобный изоляционизм значительно уменьшит его возможности как программиста.
Посмотреть профиль Отправить личное сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2005.03.28 21:03.28
Ответить с цитатой
Уважаемый vilain, вы только начинаете, поэтому я вам и рекомендую делать именно так.
Еще раз говорю вам надо создать пустой windows проект. Возможно ошибки появились, если вы создали не пустой (а потом очистили) или не windows проект.
Наконец ошибки тоже надо анализировать, в этом и заключается большая часть работы программиста.
Посмотреть профиль Отправить личное сообщение
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.03.28 21:06.04
Ответить с цитатой
Я не могу сообразить напишите пожалуйста ещё раз как создать пустой Windows проект. Если есть возможность зайдите в чат там пообщаемся нормально
Посмотреть профиль Отправить личное сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2005.03.28 21:17.43
Ответить с цитатой
На форуме я вам писал

Попробую.
1. Пункт меню File\New\Project (Visual Studio.NET, у меня версия 2003), но это почти тоже самое, что у вас.
2. В левом окне (Project Types) выбираем Visual C++ Projects.
3. В правом окне (Temlates) выбираем шаблон: Win32 Project.
4. В поле наме выбираем имя проекта.
5. В поле Location каталог, где будет находиться проект.
6. Нажимаем Ok.
7. В появившемся окне выбираем вкладку Application Settings.
6. Выбираем консольное приложение и пустой проект (Empty Project). Нажимаем Finish.
7. В результате получили пустой проект.
8. Далее View\Solution Explorer - менеджер проекта.
9. Щелкаем по Source Files правой кнопкой и выбираем Add New Items.
10. Выбираем C++File и его имя.
11. оказываемся в редакторе, где набираем программу.
12. Затем можно ее транслировать: Ctrl+Shift+B.

Только взять надо не консольное, а Windows приложение.
Вы, однако, не внимательны
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2005.03.28 21:24.41
Ответить с цитатой
атас. думается дешевле для vladislav-а пригласить villain-а на пару частных уроков
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.03.28 21:25.02
Ответить с цитатой
Вот ура получилась спасибо. Я был очень внимательный и делал всё правельно, но у меня почемуто не получалась. Спасибо.
vladislav если есть возможность напишите пожалуйста ещё пару такихже простых программ. Можно ещё с кнопкой при нажатии на каторую что-нибуть происходит. Спасибо.
Посмотреть профиль Отправить личное сообщение
moishe
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1668


Статус: Offline
СообщениеДобавлено: 2005.03.31 07:08.34
Ответить с цитатой
У меня парочка вопросов:
1.
vladislav писал(а):
while (GetMessage(&msg, NULL, 0, 0))
{
//транслировать коды виртуальных клавиш в ASCII-коды
TranslateMessage(&msg);
//переправить сообщение процедуре окна
DispatchMessage(&msg);
}
Почему именно так? Зачем while(GetMessage(...))? Почему GetMessage(&msg,NULL,0,0)? Я пишу так:
while(msg.message!=WM_QUIT) {
GetMessage(&msg,NULL,0,0xFFFF);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
В чем разница в работе вашего и моего цикла?

2.
vladislav писал(а):
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch(message) {
case WM_CREATE: break;
case WM_DESTROY: PostQuitMessage(0); break;
case WM_PAINT: break;
default: return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

А я пишу так:
switch(message) {
case WM_CREATE: {...} break;
case WM_DESTROY: PostQuitMessage(0); return(0);
case WM_PAINT: {...} break;
}
return DefWindowProc(hWnd, message, wParam, lParam);

Тот же вопрос. Почему не следует вызывать DefWindowProc для сообщений, на которые мы решили как-то прореагировать?
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.03.31 18:58.25
Ответить с цитатой
vladislav я хочу с вами посоветоваться. Для начинающего может мне сначала начать программировать на визуал бейсик, а потом перейти на Си? Или продолжать изучать Си и на нём программировать?
Посмотреть профиль Отправить личное сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2005.03.31 19:08.15
Ответить с цитатой
Переходить не советую. Я надеюсь Вам не 50-лет и вас жизнь нисколько не торопит. Для овладения Visual C не жалко времени.
Посмотреть профиль Отправить личное сообщение
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.03.31 19:32.28
Ответить с цитатой
vladislav вы бы не могли мне написать текст, который создаёт кнопку. Что бы его добавить к тексту, который вы мне давали и получилось окно с кнопкой, хотя бы что бы кнопка не выполняла ни каких функций.
Посмотреть профиль Отправить личное сообщение
moishe
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1668


Статус: Offline
СообщениеДобавлено: 2005.03.31 20:49.52
Ответить с цитатой
Да пожалуйста! Здесь даже две кнопки. Разбирайся наздоровье.
#include <windows.h> 

HINSTANCE hi; 
LPSTR CLASS_NAME="TMP_CLASS"; 
LPSTR BUTTONCLASS="BUTTON"; 

LRESULT CALLBACK WndProc(HWND hwnd,UINT mes,WPARAM wp,LPARAM lp) { 
switch(mes) { 
case WM_CREATE: 
   ShowWindow(hwnd,SW_SHOW); 
   CreateWindow(BUTTONCLASS,"Левая",WS_CHILD|BS_CENTER|WS_TABSTOP|BS_PUSHBUTTON|WS_VISIBLE,24,138,130,28,hwnd,(HMENU)101,hi,NULL); 
   CreateWindow(BUTTONCLASS,"Правая",WS_CHILD|BS_CENTER|WS_TABSTOP|BS_PUSHBUTTON|WS_VISIBLE,164,138,130,28,hwnd,(HMENU)102,hi,NULL); 
   break; 
case WM_QUIT: return(0);
case WM_CLOSE: 
   MessageBox(NULL,"А вот и нет!","Перехват",MB_OK|MB_SETFOREGROUND|MB_ICONEXCLAMATION); 
   return(0);
case WM_DESTROY: 
   PostQuitMessage(0);
   return(0); 
case WM_COMMAND: switch(LOWORD(wp)) { 
   case 101: 
      MessageBox(NULL,"Нажал левую кнопку","Приложение",MB_OK|MB_SETFOREGROUND|MB_ICONINFORMATION); 
      break; 
   case 102: 
      MessageBox(NULL,"Нажал правую кнопку","Приложение",MB_OK|MB_SETFOREGROUND|MB_ICONINFORMATION); 
   } 
} 
return(DefWindowProc(hwnd,mes,wp,lp)); 
}//=============================================

int WINAPI WinMain(HINSTANCE hins,HINSTANCE hpi,LPSTR cmd,int ncmd) { 
MSG msg; 
WNDCLASSEX w; 
LOGBRUSH brush; 

hi=hins; 
brush.lbStyle=BS_SOLID; 
brush.lbColor=RGB(0xC0,0xC0,0xC0); 
memset(&w,0,sizeof(WNDCLASSEX)); 
w.cbSize=sizeof(WNDCLASSEX); 
w.style=CS_HREDRAW|CS_VREDRAW; 
w.lpfnWndProc=WndProc; 
w.hInstance=hi; 
w.cbWndExtra=36; 
w.hbrBackground=CreateBrushIndirect(&brush); 
w.lpszClassName=CLASS_NAME; 
RegisterClassEx(&w); 

CreateWindowEx(WS_EX_LEFT,CLASS_NAME,"Незакрывающееся приложение", 
WS_SYSMENU|WS_TILED,30,10,320,200,NULL,NULL,hi,NULL); 

while(GetMessage(&msg,NULL,0,0)) { 
   TranslateMessage(&msg); 
   DispatchMessage(&msg); 
} 
return(0); 
}
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.03.31 20:53.50
Ответить с цитатой
Спасибо буду разбираться. moishe можно спросить, а ты кто программист? Или тоже учишься программировать?
Посмотреть профиль Отправить личное сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2005.03.31 21:03.05
Ответить с цитатой
По поводу цикла обработки сообщений. Да все равно как.
Что касается функции DefWindowProc, то честно говоря у меня нет данных, когда использование этой функции как то влияло на обработку сообщений. Просто я всегда писал по указанной схеме. Да, есть проблема с WM_CREATE. Здесь можно возвратить -1 и тогда окно будет разрушено.
Вот что касается функции диалогового окна, то там иногда использование return 0 вместо return 1 может привести к некоторым нюансам (WM_INITDIALOG).


Последний раз редактировалось: vladislav (2005.03.31 21:08.54), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
moishe
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1668


Статус: Offline
СообщениеДобавлено: 2005.03.31 21:08.49
Ответить с цитатой
Ну да, в трудовой у меня это слово написано.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.03.31 21:17.47
Ответить с цитатой
vladislav я вам уже говорил что у меня есть простая программа, но она не на С++, а на VB вы мне поможете сделать типа такойже только на С++? Только тогда когда я разберусь с С++ и смогу сам составлять маленькии программы. Если можно я скину её вам по E-mail 'у? Вы посмотрите что за программа. Только её не я писал.
Посмотреть профиль Отправить личное сообщение
vladislav
Запомнил кнопки...



Зарегистрирован: 04.02.2005
Сообщения: 147


Статус: Offline
СообщениеДобавлено: 2005.03.31 21:35.12
Ответить с цитатой
Нет, в VB я разбираться не хочу. А вот на Си программировать помогу.
Посмотреть профиль Отправить личное сообщение
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.04.03 16:16.00
Ответить с цитатой
Помогите найти ошибки

#include <windows.h>
#include "resource.h"


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK DIALl(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hh;

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char cname[]="Class";
char title[]="Наше первое окно";
MSG msg;

//структура для регистрации класса окон
WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+15);
wc.lpszMenuName = 0;
wc.lpszClassName = cname;
//регистрируем класс
if(!RegisterClass(&wc)) return 0;
//создать окно
HWND hWnd = CreateWindow(
cname, //класс
title, //заголовок
WS_OVERLAPPEDWINDOW, //стиль окна
0, //координата X
0, //координата Y
500, //ширина окна
300, //высота окна
NULL, //дескриптор окна-родителя
NULL, //дескриптор меню
hInstance, //идентификатор приложения
NULL); //указатель на структуру, посылаемую
//по сообщению WM_CREATE
//проверим, создалось ли окно
if (!hWnd) return 0;
//показать окно
ShowWindow(hWnd, nCmdShow);
//обновить содержимое окна
UpdateWindow(hWnd);

//цикл обработки сообщений
while (GetMessage(&msg, NULL, 0, 0))
{
//транслировать коды виртуальных клавиш в ASCII-коды
TranslateMessage(&msg);
//переправить сообщение процедуре окна
DispatchMessage(&msg);
}

return 0;
};

//процедура окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

static HWND hb;
switch(message)
{
//
case WM_CREATE:
//
hb = CreateWindow(
"BUTTON",
"Выход",
WS_CHILD|WS_VISIBLE,
10,
10,
60,
30,
hWnd,
NULL,
hh,
NULL
);
break;
//
case WM_COMMAND:
if((HWND)lParam==hb)
{
DialogBox(hh, (char *)IDD_DIALOGl, hWnd, DIALl);
};
break;
//
case WM_DESTROY:
//
PostQuitMessage(0);
break;
//
case WM_PAINT:
//
UpdateWindow(hb);
break;
//
case WM_LBUTTONDOWN:
//
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
//
BOOL CALLBACK DIALl(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
//
case WM_INITDIALOG:
break;
//
case WM_CLOSE:
EndDialog(hwndDlg, 0);
break;
case WM_COMMAND:
//
if(LOWORD(wParam)==IDC_ BUTTON1)
{
EndDialog(hwndDlg, 0);
};
break;
};
return 0;
}
Посмотреть профиль Отправить личное сообщение
mоishe
Гость







Статус: Offline
СообщениеДобавлено: 2005.04.04 06:48.34
Ответить с цитатой
На первый взгляд: в WinMain не вижу строчки
hh=hInstance;

Выложи resource.h и <имя_файла_программы>.rc, тогда точнее скажу.
villain
Освоившийся


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 78
Откуда: Shadrinsk

Статус: Offline
СообщениеДобавлено: 2005.04.14 22:30.33
Ответить с цитатой
Почему тема не продолжаеться?
Посмотреть профиль Отправить личное сообщение
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2005.04.15 02:52.10
Ответить с цитатой
villain писал(а):
Почему тема не продолжаеться?

продолжи - в чём проблема то, ты хоть читаешь, что пишут?
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
mоishe
Гость







Статус: Offline
СообщениеДобавлено: 2005.04.20 15:25.33
Ответить с цитатой
Помогите найти _подробное_ (желательно даже полное) описание формата ресурс-скрипта (*.rc) на английском или русском языке!
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2005.04.20 15:53.50
Ответить с цитатой
http://msdn.microsoft.com/library/en-us/vcresed/html/vcconWorkingWithResources.asp

http://msdn.microsoft.com/library/en-us/tools/tools/about_resource_files.asp
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
mоishe
Гость







Статус: Offline
СообщениеДобавлено: 2005.04.21 07:01.04
Ответить с цитатой
Спасибо. Первая ссылка - мимо, а вот вторая, вроде бы, как раз то, что надо. Попробую еще на Борланде порыться.
Страница 4 из 5
Начать новую тему   Ответить на тему   вывод темы на печать
На страницу Пред.  1, 2, 3, 4, 5  След.
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> Общие вопросы программирования -> Преподавание программирования

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы
Рейтинг UralWeb