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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 15:05   #1
Ytpyfqrf
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 11
По умолчанию Как программно создать форму на С

Если кто нибудь знает, то подскажите (научите):

1) Как программно создать форму на С
2) Как программно создать точку на мониторе

3) Просьба, не и не говорить: "А на фиг это тебе нужно?"

P.s. заранее благодарю, всех, кто не пожалеет времени для меня.
Ytpyfqrf вне форума Ответить с цитированием
Старый 02.06.2010, 12:07   #2
Ytpyfqrf
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 11
По умолчанию

Для создания "окна" достаточно вот этого:
1) создать пустой проект Win32 Project (обзовем его для примера HELLOWIN);
2) добавить файл HELLOWIN.C;
3) написать в файле HELLOWIN.C следующий текст:
Код:
   1.#include <windows.h>
   2.      
   3. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
   4.       
   5.      int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
   6.     {
   7.        //static char szAppName[] = "HelloWin";
   8.        static TCHAR szAppName[] = _T("HelloWin");
   9.        HWND hwnd;
  10.        MSG msg;
  11.        WNDCLASSEX wndclass;
  12.        wndclass.cbSize = sizeof(wndclass);
  13.        wndclass.style = CS_HREDRAW | CS_VREDRAW;
  14.        wndclass.lpfnWndProc = WndProc;
  15.        wndclass.cbClsExtra = 0;
  16.        wndclass.cbWndExtra = 0;
  17.        wndclass.hInstance = hInstance;
  18.        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  19.        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);  
  20.        wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH); //цвет фона окна WHITE_BRUSH = от 0 до 7
  21.        wndclass.lpszMenuName = NULL;
  22.        wndclass.lpszClassName = szAppName;
  23.        wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  24.        RegisterClassEx(&wndclass);
  25.        hwnd = CreateWindow(
  26.           szAppName, // window class name
  27.           "The Hello Program", // window caption
  28.           WS_OVERLAPPEDWINDOW, // window style
  29.           CW_USEDEFAULT, // initial x position
  30.           CW_USEDEFAULT, // initial y position
  31.           CW_USEDEFAULT, // initial x size
  32.           CW_USEDEFAULT, // initial y size
  33.           NULL, // parent window handle
  34.           NULL, // window menu handle
  35.           hInstance, // program instance handle
  36.           NULL
  37.           ); // creation parameters   ShowWindow(hwnd, iCmdShow);
  38.        UpdateWindow(hwnd);
  39.        while(GetMessage(&msg, NULL, 0, 0))
  40.        {
  41.           TranslateMessage(&msg);
  42.           DispatchMessage(&msg);
  43.        }
  44.        return msg.wParam;
  45.      }
  46.      LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
  47.      {
  48.        HDC hdc;
  49.        PAINTSTRUCT ps;
  50.        RECT rect;
  51.       
  52.        switch(iMsg)
  53.        {
  54.        case WM_CREATE:
  55.           return 0;
  56.        case WM_PAINT:
  57.           hdc = BeginPaint(hwnd, &ps); //(1). Если убрать (1) и (2) прога будет постоянно
  58.                                        //     переходить в функцию DefWindowProc
  59.                                        //    (и в ней по умолчанию перерисовывать этот
  60.                                        //     участок программы)
  61.                                        //     и грузить ОС, а это не правильно.      GetClientRect(hwnd, &rect);
  62.           //DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  63.           DrawText(hdc, _T("Hello, Windows 95!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  64.           EndPaint(hwnd, &ps);         //(2).
  65.           return 0;
  66.        case WM_DESTROY:
  67.           PostQuitMessage(0);
  68.           return 0;
  69.        }
  70.        return DefWindowProc(hwnd, iMsg, wParam, lParam);
  71.      }
4) Build Project HELLOWIN
5) Запустить получившийся HELLOWIN.ехе


2. Программа рисует на экране (мониторе, дисплее - называйте как хотите) точку 7 на 7 пикселей.

Процедура такая же, как и для создания "окна" (см. выше), только меняем код не следующий:
Код:
   1.      #include <windows.h>
   2.       
   3.      int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
   4.                         PSTR szCmdLine, int iCmdShow)
   5.      {
   6.      HBRUSH hBrush;
   7.      HWND hwnd;  
   8.      HDC hdc;
   9.      hBrush = CreateSolidBrush(RGB(255,255,255)); // RGB(170,45,17)
  10.       
  11.      hwnd = GetDesktopWindow();
  12.       
  13.      hdc=GetWindowDC(hwnd);
  14.       
  15.      SelectObject(hdc,hBrush);
  16.      while(1==1)
  17.      //Rectangle(hdc,ПраваяТочка, НижняяТочка, ЛеваяТочка, ВерхняяТочка);
  18.      Rectangle(hdc, 707, 307, 701, 301);
  19.       
  20.      return 0;
  21.}
Примечание: Закрывается программа через диспетчер задач (не судите строго, цель программы нарисовать точку).

Последний раз редактировалось Ytpyfqrf; 02.06.2010 в 13:45.
Ytpyfqrf вне форума Ответить с цитированием
Старый 02.06.2010, 12:16   #3
Ytpyfqrf
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 11
По умолчанию

Спасибо, Ytpyfqrf!
Сам задаешь вопросы, сам на них отвечаешь.
Поэтому мы так и живем. Если бы кто то сразу помог, уже бы двигался дальше, и приносил пользу людям. Цель всей этой учебы в конечном итоге делать приложения удобными и понятными для пользователей (зарабатывать деньги - это не главное).

Американский форум. Сначала задаешь вопрос, потом тебе отвечают.
Еврейский форум. Сначала задаешь вопрос, потом тебе задают вопрос.
Русский форум. Сначала задаешь вопрос, потом в лучшем случае тебе долго объясняют какой ты му*ак.

Последний раз редактировалось Ytpyfqrf; 02.06.2010 в 12:24.
Ytpyfqrf вне форума Ответить с цитированием
Старый 02.06.2010, 13:08   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

просто надо уточнять что вам надо на АПИ.
а не например VCL/MFC для Билдера/Студии.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.06.2010, 14:08   #5
Ytpyfqrf
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 11
По умолчанию

Или вот еще для рисования точки.
Для 7х7:

Код:
#include <windows.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                    PSTR szCmdLine, int iCmdShow) 
{
	int x, y;
	HWND hwnd;  
	HDC hdc; 

	hwnd = GetDesktopWindow();
	
	hdc=GetWindowDC(hwnd); 

	while(1==1)
	{
		for(x=701; x<707; x=x+1)
		{
			for(y=301; y<307; y=y+1)
				//SetPixel(hdc, координата x, координата y, цвет)
				SetPixel(hdc, x, y, RGB(0,0,0));
		}
	}

	return 0; 
}
Для 1 рх (просто трудно будет увидеть тому, у кого плохое зрение):

Код:
#include <windows.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                    PSTR szCmdLine, int iCmdShow) 
{
	HWND hwnd;  
	HDC hdc; 

	hwnd = GetDesktopWindow();
	
	hdc=GetWindowDC(hwnd); 

	while(1==1)
	{
				//SetPixel(hdc, координата x, координата y, цвет)
				SetPixel(hdc, 700, 300, RGB(0,0,0));
	}

	return 0; 
}

Последний раз редактировалось Ytpyfqrf; 02.06.2010 в 14:16.
Ytpyfqrf вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно создать форму? viter.alex Microsoft Office Word 10 08.09.2015 09:00
Как программно развернуть форму на весь экран? chandrasecar Общие вопросы Delphi 6 26.07.2015 10:39
Как программно на делфи, запихнуть текст в форму веб-страницы ? Alexandrrrr Общие вопросы Delphi 3 29.03.2009 16:07
Как создать форму с запросом? LakyWinter Microsoft Office Access 4 23.11.2008 19:58
Как программно создать *.exe файл ? SG13 Общие вопросы Delphi 8 20.06.2008 15:46