Re: gui-приложение на С

ka19

Народ, подскажите новичку, с чего начать?
Только не спрашивайте, зачем мне это нужно!
Просто хочется сделать маленькое окошко с надписью
а там ещё кнопочку ок и повесить на неё что-нибудь!
Именно С!)

Marinavo_0507

ну эта
gtk+ типа

ka19

А можно поподробнее? У меня есть блокнот, я там могу писать
программки на С, потом запускаю bat-файл, он мне из cpp делает
exe. Я хочу использовать win api!

mkrec

начни с прочтения книжек. Например, в книгах по MSVC для чайников часто приводят полные листинги. Скажем, вспоминаются два тома "Библиотеки программиста", посвященные программингу на С под WinNT.

klyv

Всё простою :)
Вот простейшее приложение: (из MSDN)
#include <windows.h> 

// Global variable

HINSTANCE hinst;

// Function prototypes.

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
InitApplication(HINSTANCE);
InitInstance(HINSTANCE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

// Application entry point.

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;

if (!InitApplication(hinstance
return FALSE;

if (!InitInstance(hinstance, nCmdShow
return FALSE;

BOOL fGotMessage;
while fGotMessage = GetMessage(&msg, (HWND) NULL, 0, 0 != 0 && fGotMessage != -1)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
UNREFERENCED_PARAMETER(lpCmdLine);
}

BOOL InitApplication(HINSTANCE hinstance)
{
WNDCLASSEX wcx;

// Fill in the window class structure with parameters
// that describe the main window.

wcx.cbSize = sizeof(wcx); // size of structure
wcx.style = CS_HREDRAW |
CS_VREDRAW; // redraw if size changes
wcx.lpfnWndProc = MainWndProc; // points to window procedure
wcx.cbClsExtra = 0; // no extra class memory
wcx.cbWndExtra = 0; // no extra window memory
wcx.hInstance = hinstance; // handle to instance
wcx.hIcon = LoadIcon(NULL,
IDI_APPLICATION); // predefined app. icon
wcx.hCursor = LoadCursor(NULL,
IDC_ARROW); // predefined arrow
wcx.hbrBackground = GetStockObject(
WHITE_BRUSH); // white background brush
wcx.lpszMenuName = "MainMenu"; // name of menu resource
wcx.lpszClassName = "MainWClass"; // name of window class
wcx.hIconSm = LoadImage(hinstance, // small class icon
MAKEINTRESOURCE(5
IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON
GetSystemMetrics(SM_CYSMICON
LR_DEFAULTCOLOR);

// Register the window class.

return RegisterClassEx(&wcx);
}

BOOL InitInstance(HINSTANCE hinstance, int nCmdShow)
{
HWND hwnd;

// Save the application-instance handle.

hinst = hinstance;

// Create the main window.

hwnd = CreateWindow(
"MainWClass", // name of window class
"Sample", // title-bar string
WS_OVERLAPPEDWINDOW, // top-level window
CW_USEDEFAULT, // default horizontal position
CW_USEDEFAULT, // default vertical position
CW_USEDEFAULT, // default width
CW_USEDEFAULT, // default height
(HWND) NULL, // no owner window
(HMENU) NULL, // use class menu
hinstance, // handle to application instance
(LPVOID) NULL); // no window-creation data

if (!hwnd)
return FALSE;

// Show the window and send a WM_PAINT message to the window
// procedure.

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
return TRUE;

}
А ещё есть сайтик http://firststeps.ru/ там слева есть про WinAPI

feliks28

return msg.wParam;
А это что за запись? (Исходя из того, что в Си классов вроде как нет)

shlyumper

спасибо, поржал перед сном.

Vladislav177Rus

Это структура. Они в Си есть.

feliks28

Ясно, спасибо.
p.s. Рад, что дал кому-то возможность "поржать". :D Но я не считаю зазорным ни чего-то не знать, ни задавать вопросы, если не знаешь.

Werdna

У меня есть блокнот, я там могу писать
программки на С, потом запускаю bat-файл, он мне из cpp делает
exe
И эти люди потом придут на собеседование и скажут, что владеют Си профессионально... :crazy:

Oper

И эти люди потом придут на собеседование и скажут, что владеют Си профессионально... :crazy:
ты ведь этого не знаешь, зачем наговаривать? :confused:

Werdna

ты ведь этого не знаешь, зачем наговаривать? :confused:
Лучше бы не знал, да...
:o

SPARTAK3959

А MainWndProc ты куда дел? Такая программа просто не скомпилится.

oleg_n

И эти люди потом придут на собеседование и скажут, что владеют Си профессионально... :crazy:
а что в этом страшного?

Werdna

а что в этом страшного?
а что в этом хорошего? ни себе: ни людям...

oleg_n

ни себе: ни людям...
это вообще к чему?

Werdna

это вообще к чему?
к тому, что человек неизвестно чегму учится, неизвестно зачем.

0000

2, Хоть бы проверил что пример рабочий. Ведь правда оконной процедуры то нет.

oleg_n

что ты куришь?!

klyv

Ведь правда оконной процедуры то нет.
Омагат! Какой ужас, как я посмел понадеяться на милых MSDNщиков!.. :)
Для тех, кому этот пример нужен, можно для начала использовать DefWindowProc вместо своей - как-то работать будет.
Или заполнить шаблончик из MSDN:
LRESULT CALLBACK MainWndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam) // second message parameter
{

switch (uMsg)
{
case WM_CREATE:
// Initialize the window.
return 0;

case WM_PAINT:
// Paint the window's client area.
return 0;

case WM_SIZE:
// Set the size and position of the window.
return 0;

case WM_DESTROY:
// Clean up window-specific data objects.
return 0;

//
// Process other messages.
//

default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}

Slavaga

У меня есть блокнот, я там могу писать
программки на С, потом запускаю bat-файл, он мне из cpp делает
exe
И эти люди потом придут на собеседование и скажут, что владеют Си профессионально...
А ты родился со знанием С? Или все-таки тоже с чего-то начинал?

nik93

А ты родился со знанием С? Или все-таки тоже с чего-то начинал?
он к тому, что при комерческих разработках это никому нафиг не нужно.

Oper

при комерческих разработках
гы, а что кроме коммерческих, разработок не бывает ? :p

Werdna

он к тому, что при комерческих разработках это никому нафиг не нужно.
Нет, это нафиг не нужно ни в промышленном программировании, ни в художественном.
WinAPI — это хоть местами и прикольная штука, но вовсе не основа программирования. К тому же она не нужна сейчас, в 2007 году.
Проблема в том, что новички не знают "что изучать", вот что страшно. Они изучают Сишарп, а потом спрашивают почему им мало платят. Они изучают MFC и WinAPI, а потом не понимают, почему их знание C++ оценивают на тройку. Они не понимают, что C++ — это не "Си с классами". Наконец, они не понимают почему документация по STL — это не msdn.

Werdna

гы, а что кроме коммерческих, разработок не бывает ? :p
А ты считаешь WinAPI — художественной штукой?
Единственное применение WinAPI в 2007 году я вижу только в допиливании wine. Это не мертвая платформа, поэтому нельзя сказать, что её изучение — работа историка. Такое как изучение ассемблера Спектрума. Писать для спектрума — да, художественное программирование. Писать под винду с использованием WinAPI будет историческим художественным через 10 лет. Сейчас — нет, и вот почему.
Ещё живы те, кто на нём (WinAPI) продолжает писать. Прежде всего по привычке, потому что не хочется переучиваться. Потом — старые проекты проще поддерживать пока они нужны. Разрабатывать новое на WinAPI в 2007 — это зло.
А теперь посмотрите с чего начинает человек. Это его первый шаг в профессию! Пока он выучится основам — наступит 2009 год, и вот тогда-то он с WinAPI просто не найдёт работу.

Gunsleader

а нафига гуи писать на с? даже не с++ с классами, и мфц( атл) к примеру... Объясните ? я просто не в курсе...

Oper

а нафига гуи писать на с
смотря кто заказчик.
Пример 1. Заказчик КЮБ. no comment.
Пример 2. Мега-секретная разработка системы реального времени для военных под ОС на их машинах. Тут конечно спорно, но попробуй их убедить принять код на C++ или на питоне, допустим... :crazy:
думаю плюсового компилятора или интерпретатора питона даже не найдется.

yolki

для КЮБ достаточно тривиального Xlib-а (причём шаблоны для программ он сам же и раздаёт тут никакими winapi и не пахнет.
Вероятно, если _самому_ разобраться и понять, то реально и GTK-шную прогу КЮБу сдать.

yolki

на МСВС есть gcc, правда 2.94 вроде.
зато в МСВС-3.0 вроде даже уже и ядро 2.6 и компилятор что-то около 4.0
хотя её никто живьём не видел, только на конференциях похваляются

Oper

Ну не известно же в какой степени допилинное там ядро и как собран тот же gcc.
Семантика C относительно "проста", в сравнении с процедурными высокоуровневыми ЯП. Если предположить, что реализация ядра и X window в МСВС "доверенная", то вряд ли при написании мега-секретной системы военные предпочтут высокоуровневые языки типа python и тому подобные языку с простой семантикой, ибо "хрен его знает, как оно работает и вообще, может Г. Россум — агент ЦРУ — встроил закладки в интерпретатор питона".

evgen5555

А зачем вообще учить C++, чувак?

Werdna

Пример 1. Заказчик КЮБ. no comment.

Я общался с КЮБ, и сдавал ему жесткий плюсовый код. Он принял, правда сначала не поверил что я написал. После минуты разговора он мне поставил максимальный балл. Сложилось впечатление о том, что КЮБ — очень адекватный преподаватель, причем с широким кругозором.
Если у тебя были с ним проблемы — ты просто плохой программист.

Werdna

А зачем вообще учить C++, чувак?
Это промышленный стандарт. Я с трудом представляю грамотного специалиста в области разработки ПО без знаний плюсов. Опять же, из знаний плюсов вовсе не следует адекватность чела, тут комплекс знаний, навыков и опыта.

Werdna

"хрен его знает, как оно работает и вообще, может Г. Россум — агент ЦРУ — встроил закладки в интерпретатор питона"

У тебя о спецслужбах представление как о отсталых мудаках, которые якобы не в состоянии Питон освоить.
Есть необходимость — Питон будет, нет необходимости — Питона не будет. Не надо разводить зоопарк языков без особой необходимости.

yolki

Полностью аналогичные ощущения от общения с КЮБ.

evgen5555

Я с трудом представляю грамотного специалиста в области разработки ПО без знаний плюсов.
Это твои половые проблемы, чуве.

Werdna

Это твои половые проблемы, чуве.
Чтобы ответить на такую реплику хотелось бы иметь представление о тебе. У тебя есть страничка в "моём круге", любой другой социалке или может у тебя есть просто страничка с резюме? Просто так спорить смысла нет, согласись?

evgen5555

На реплику не обязательно отвечать, я не требую :)

Oper

Если у тебя были с ним проблемы — ты просто плохой программист.
бугага :lol:
кто тебе сказал, что у меня с ним были какие-то проблемы ?
У тебя о спецслужбах представление как о отсталых мудаках, которые якобы не в состоянии Питон освоить.
ну да, офигенно продвинутые чуваки — в МСВС до сих пор используется gcc 2.95 и ядро ветки 2.0
Они не в состоянии освоить не то что, Питон, математические модели ролевого разграничения доступа.

Werdna

Они не в состоянии освоить не то что, Питон, математические модели ролевого разграничения доступа.
Я не буду спорить, потому что мало знаю о том, что там. Думаю, что ты тоже.
По поводу Богачева — в твоем посте был намек о его некомпетентности. Я тебя расстрою, Ьогачев — очень здравый и рассудительный. Уже хотя бы то, что на мехмате нет винды — огромный плюс.

yolki

тут не в освоении проблемы.
Проблемы в том, чтобы перелопатить ворох кода.
согласись - "научиться писать на С" и "сделать компилятор языка С" слегка разные задачи. Вместо "сделать компилятор" можно поставить "проанализировать существующий компилятор"

yolki

> ядро ветки 2.0
Какое было, такое и взяли. AFAIK 2.2.24
ты можешь на себя взять всю ответственность, что ядро ветки 2.6.хх лишено багов?
или любая из существующих софтин безопасна?
а вот про МСВС утверждается, что в соответствии с разработанной моделью она вполне безопасна.

Oper

согласись - "научиться писать на С" и "сделать компилятор языка С" слегка разные задачи. Вместо "сделать компилятор" можно поставить "проанализировать существующий компилятор"
Согласен :) Вторая задача намного сложнее. Поэтому и нужно слать нах "жесткие плюсы" пианиста.

Werdna

Поэтому и нужно слать нах "жесткие плюсы" пианиста.
Я пишу в разных стилях, это вовсе не означает, что я пишу только на жестких плюсах.
Вообще, надо уметь приспосабливаться к чужому коду, и писать так, чтобы было в стиле первого автора.

Oper

Я тебя расстрою, Ьогачев — очень здравый и рассудительный
сразу вспоминается дрочка на коэффициенты распараллеливания матричных алгоритмов :grin:

Oper

Я пишу в разных стилях, это вовсе не означает, что я пишу только на жестких плюсах.
Вообще, надо уметь приспосабливаться к чужому коду, и писать так, чтобы было в стиле первого автора.
тут согласен на 100%

lurgi48

а на чем пишут гуи отцы плюсов?

Werdna

а на чем пишут гуи отцы плюсов?
Я не специалист по гуям, но сейчас если писать — надо писать кроссплатформенно. Платформозависимая гуя — это плохо.

yolki

это правильно. поэтому самый гуёвый гуй - это веб-интерфейс.

erotic

самый гуёвый гуй - это веб-интерфейс.
А что, больше не на чем писать кросс-платформенные гуи?

oleg_n

гуй должен быть удобным
это не всегда совместимо с кросплатформенностью

Olenenok

это не всегда совместимо с кросплатформенностью
+1, гном не под всеми платформами есть
Оставить комментарий
Имя или ник:
Комментарий: