• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

windows.h библиотека?

  • Ја почнал/а темата
  • #1

maximilian

Gaining Experience
26 март 2008
1,064
74
Во оваа тема (http://it.com.mk/forum/showthread.php?t=6348), видов дека се употребува библиотеката windows.h, и веројатно е за маус кликовите во таа тема.

Пошто ја прв пат гледам дека постои таква библиотека windows.h :), може ли некој поубаво да објсани што има во неа, и да каже некои функции од неа кои се користат најчесто, и во кој компилатор може да се сретнат.

Фала однапред :)
 

vasildb

Intern
17 април 2007
209
6
Луѓе, не е овој фајл за почетници. Just to warn you.:))

Ова е библиотека овозможена од Microsoft за употреба на нивното API.
Наједноставно, во овој фајл ги имате сите потребни работи за да можете да си цртате џамчиња наместо досадниот cmd.
Само се воведуваат многу нови Windows типови на променливи како HANDLE, DWORD, UINT, како додатни покрај стандардните од C++.

Што ми беше зборот, накратко, кој сака да програмира Windows апликации, а сака да му бидат брзи, и има време да составува код кој овде би бил долг 10 реда а во .Net само ред или два, тогаш нека се фати за учење на стотиците функции од оваа библиотека.

Еве пример како би изгледал кодот за најобично прозорче.
Код:
#include <windows.h>

const char g_szClassName[] = "myWindowClass";

// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg)
	{
		case WM_CLOSE:
			DestroyWindow(hwnd);
		break;
		case WM_DESTROY:
			PostQuitMessage(0);
		break;
		default:
			return DefWindowProc(hwnd, msg, wParam, lParam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPSTR lpCmdLine, int nCmdShow)
{
	WNDCLASSEX wc;
	HWND hwnd;
	MSG Msg;

	//Step 1: Registering the Window Class
	wc.cbSize		 = sizeof(WNDCLASSEX);
	wc.style		 = 0;
	wc.lpfnWndProc	 = WndProc;
	wc.cbClsExtra	 = 0;
	wc.cbWndExtra	 = 0;
	wc.hInstance	 = hInstance;
	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszMenuName  = NULL;
	wc.lpszClassName = g_szClassName;
	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION);

	if(!RegisterClassEx(&wc))
	{
		MessageBox(NULL, "Window Registration Failed!", "Error!",
			MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}

	// Step 2: Creating the Window
	hwnd = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		g_szClassName,
		"The title of my window",
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
		NULL, NULL, hInstance, NULL);

	if(hwnd == NULL)
	{
		MessageBox(NULL, "Window Creation Failed!", "Error!",
			MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}

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

	// Step 3: The Message Loop
	while(GetMessage(&Msg, NULL, 0, 0) > 0)
	{
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
	}
	return Msg.wParam;
}
Како и да е, истава библиотека можете да ја користите и во обични C++ апликации каде што на пример ви треба да го земите времето, или да запишувате во регистри,...
 

TataMata

Intern
13 јуни 2008
115
1
Нема windows.h библиотека, тоа е само склоп на хедери за програмирање на Windows API-то.

Моја препорака, директно GUI програмирање во Windows API-то, избегавај те, релативно тешко е, и сложено. Или некоја GUI библиотеки (ги има неколку) или C#.
 

NIKIHACK

Intern
10 февруари 2008
438
27
www.facebook.com
Да точно оваа е тоа дека windows програмирањето е доста сложена работа,мегутоа оваа библиотека има доста корисни функции кои можат на разни начини да се употребат,еве неколку примери:

Код:
//isklucuvanje na monitorot
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2);
//vklucuvanje na monitorot
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) -1);

//system stand by
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 1);
 

vasildb

Intern
17 април 2007
209
6
Да точно оваа е тоа дека windows програмирањето е доста сложена работа,мегутоа оваа библиотека има доста корисни функции кои можат на разни начини да се употребат,еве неколку примери:

Код:
//isklucuvanje na monitorot
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2);
//vklucuvanje na monitorot
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) -1);

//system stand by
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 1);
Не е тоа туку така, еве ти три реда код и...
Прво, знаеш што воопшто означува првиот аргумент во функцијата, и дека ова ако го искомпајлираш ќе ти јави грешка?:LOL:
 

NIKIHACK

Intern
10 февруари 2008
438
27
www.facebook.com
Во целост нешто вака треба да е,ај да не го ставам целиот проект,дека имам и слика во позадината,и три копчиња со default имиња,направите ист форм додадете ги соодветните команди на истите,и не би требало да има грешки

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h> // za Sleep()
#include <mmsystem.h> // za mciSendString()

#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
mciSendString("set CDAudio door open", NULL, 0, NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
mciSendString("set CDAudio door closed", NULL, 0, NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
// gasi monitor

Sleep(500); 

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2);
Sleep(500);
// pali monitor

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) -1);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
// stand by

Sleep(500); 

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 1);        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, "C:\WINDOWS\Web\Wallpaper\Windows XP.jpg", SPIF_UPDATEINIFILE );

}
//---------------------------------------------------------------------------
 

vasildb

Intern
17 април 2007
209
6
NIKIHACK немој да ја расипуваш темава. Од кодот што го постира, грешка имаш каде што ја приклучуваш библиотеката Unit1.h. Надолу уште неколку, така да постирај кодови ако ги разбираш.

Иначе кратко и јасно, со windows.h во комбинација со уште некои, се прави се што може да направи Windows-от.
 

Нови мислења

Последни Теми

Статистика

Теми
43,496
Мислења
821,772
Членови
28,040
Најнов член
Mrale
На врв Дно