webForumDet fria alternativet

Fullskärms läge, och prioritet i win XP?

C/C++

3 svar · 370 visningar · startad av David Magnusson

Medlem sedan nov. 20031 inlägg
Frågan#1

Undrar hur man gör för att programmet ska starta i fullskärms läge, och även hur man skriver för att ange prioritet i win XP i c++.. Håller på med ett litet kul program, som kan bli ännu kuligare om jag får veta detta.. =)

Mvh:David Magnusson

Medlem sedan juli 2002581 inlägg
#2

Fullskärmsläge är svårt att göra på riktigt, men du kan skapa ett fönster med WS_POPUP och anropa SetWindowPos() med HWND_TOPMOST och göra det stort nog att täcka skärmen. Då uppnår du samma effekt.
Annars bör du lära dig DirectX eller motsvarande.

För att ställa in maximal prioritet, kör denna kod (OBS!, ingen systemprocess eller något annat kommer ens i närheten av denna prioritet, kan bli kärvt om du använder mycket processor)

SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS );
SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL );
Medlem sedan juni 200318 inlägg
#3

Använd dig av Windows API

Jag har slängt ihop lite kod som kanske är det du söker.
Programmet skapar ett fönster som täcker hela skärmen ställer in höjden&bredden detsamma som monitorns upplösning. Skärmen målas upp helt svart.
Programmet är skrivet i ren Windows API. Kompilerat i Visual C++ och test kört i XP.
Har inte orkat skrivit så mycket kommentarer.
Hoppas att det här ger dig lite tips.

[_kod]
//main.cpp

/* Avsluta programmet med Alt+F4*/

#include <WINDOWS.H>

HWND g_hWndMain=0; /*global*/
LRESULT CALLBACK WndProc (HWND hWnd, UINT wMessage,WPARAM wParam, LPARAM lParam);
bool minCreateWindow(WNDPROC WndProc, HWND &hWnd/*Referens till pekare så att vi kan ändra den*/);

// ENTRY här börjar programmet
int WINAPI WinMain (HINSTANCE hInst,HINSTANCE,LPSTR,int)
{
minCreateWindow(WndProc,g_hWndMain);

MSG  msg;   

while (GetMessage (&msg, NULL, 0, 0))

{

	TranslateMessage (&msg) ;
	DispatchMessage (&msg) ;

}

return(0);

}// // WinMain(...)

/*skapar ett fönster som täcker hela skärmen*/
bool minCreateWindow(WNDPROC WndProc, HWND &hWnd/*Referens till pekare så att vi kan ändra den*/)
{
WNDCLASS wndWc;
char MITTKLASSNAMN[] = "MittKlassNamn";

wndWc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wndWc.lpfnWndProc = (WNDPROC) WndProc;
wndWc.cbClsExtra = 0;
wndWc.cbWndExtra = 0;
wndWc.hInstance = GetModuleHandle(NULL);
wndWc.hIcon = LoadIcon(NULL ,MAKEINTRESOURCE(IDI_APPLICATION)/*standard ikon*/);
wndWc.hCursor = LoadCursor (NULL, IDC_ARROW);
wndWc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndWc.lpszMenuName = NULL;
wndWc.lpszClassName = MITTKLASSNAMN;

// register class
ATOM ret = RegisterClass(&wndWc);

// upplösningens höjd o bredd
int screen_width = (WORD)GetSystemMetrics(SM_CXSCREEN);
int screen_height = (WORD)GetSystemMetrics(SM_CYSCREEN);

// skapar fönstret
hWnd = CreateWindow( MITTKLASSNAMN,
"ProgranmmetsNamn",
WS_POPUP, 0, 0, screen_width, screen_height, NULL,
NULL,
GetModuleHandle(NULL),
NULL);

ShowWindow(hWnd, SW_SHOW);
UpdateWindow (hWnd);

// return
return (hWnd?true:false);
}

LRESULT CALLBACK WndProc (HWND hWnd, UINT wMessage,WPARAM wParam,LPARAM lParam)

{

// Vilket meddelande har vi?     
	switch (wMessage)                
{
	/\*anropas bla. när du trycker Alt+F4\*/
	case WM_DESTROY: 
	{
	    PostQuitMessage(0);   
                                break ; 
	}

default:// Standard Windows meddelande process                        
		return DefWindowProc (hWnd,
                                            wMessage,wParam,lParam);
		break;
	}

return(0); // returnera till Windows att terminate pgm 

}
// Slut på WndProc
[_/kod]

Medlem sedan juni 200318 inlägg
#4

Re: Använd dig av Windows API

Pragma skrev:

Jag har slängt ihop lite kod som kanske är det du söker.
Programmet skapar ett fönster som täcker hela skärmen ställer in höjden&bredden detsamma som monitorns upplösning. Skärmen målas upp helt svart.
Programmet är skrivet i ren Windows API. Kompilerat i Visual C++ och test kört i XP.
Har inte orkat skrivit så mycket kommentarer.
Hoppas att det här ger dig lite tips.

 
//main.cpp

/* Avsluta programmet med Alt+F4*/

#include <WINDOWS.H>

HWND g_hWndMain=0; /*global*/
LRESULT  CALLBACK WndProc (HWND hWnd, UINT wMessage,WPARAM wParam, LPARAM lParam);
bool minCreateWindow(WNDPROC WndProc, HWND &hWnd/*Referens till pekare så att vi kan ändra den*/);

// ENTRY här börjar programmet
int WINAPI WinMain (HINSTANCE hInst,HINSTANCE,LPSTR,int)
{
	minCreateWindow(WndProc,g_hWndMain);

	MSG  msg;   
	
	while (GetMessage (&msg, NULL, 0, 0))
  {
		
		TranslateMessage (&msg) ;
		DispatchMessage (&msg) ;
  }

	return(0);
}// // WinMain(...)

/*skapar ett fönster som täcker hela skärmen*/
bool minCreateWindow(WNDPROC WndProc, HWND &hWnd/*Referens till pekare så att vi kan ändra den*/)
{
  WNDCLASS wndWc;
   char MITTKLASSNAMN[] = "MittKlassNamn";

  wndWc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
  wndWc.lpfnWndProc = (WNDPROC) WndProc;
  wndWc.cbClsExtra = 0;
  wndWc.cbWndExtra = 0;
  wndWc.hInstance = GetModuleHandle(NULL);
  wndWc.hIcon			=		LoadIcon(NULL ,MAKEINTRESOURCE(IDI_APPLICATION)/*standard ikon*/);
	wndWc.hCursor			= LoadCursor (NULL, IDC_ARROW);
  wndWc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
  wndWc.lpszMenuName = NULL;
  wndWc.lpszClassName = MITTKLASSNAMN;

  // register class
  ATOM ret = RegisterClass(&wndWc);


  // upplösningens höjd o bredd
  int screen_width = (WORD)GetSystemMetrics(SM_CXSCREEN);
  int screen_height = (WORD)GetSystemMetrics(SM_CYSCREEN); 

  // skapar fönstret
  hWnd = CreateWindow(	MITTKLASSNAMN, 
			"ProgranmmetsNamn",
                                                 WS_POPUP,					0,						0, 					                screen_width,					screen_height,					NULL, 
                                                NULL, 
			GetModuleHandle(NULL), 
			NULL);

	
  ShowWindow(hWnd, SW_SHOW);
  UpdateWindow (hWnd);    
							
  // return
  return (hWnd?true:false);
}


LRESULT  CALLBACK WndProc (HWND hWnd, UINT wMessage,WPARAM wParam,LPARAM lParam)

{
	

	// Vilket meddelande har vi?     
		switch (wMessage)                
    {
		/*anropas bla. när du trycker Alt+F4*/
		case WM_DESTROY: 
		{
		    PostQuitMessage(0);   
                                    break ; 
		}

    default:// Standard Windows meddelande process                        
			return DefWindowProc (hWnd,
                                                wMessage,wParam,lParam);
			break;
		}

    return(0); // returnera till Windows att terminate pgm 

}
// Slut på WndProc
252 ms totalt · 4 externa anrop · v20260731065814-full.2d97a731
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)