Désactiver Le Redimensionnement De La Fenêtre Win32
comment puis-je désactiver le redimensionnement en faisant glisser le bord de windows?
Voici ma création de la fenêtre de code
bool CreateGLWindow(char* title, int width, int height)
{
GLuint PixelFormat; //Holds The Results After Searching For A Match
WNDCLASS wc; //Windows Class Structure
DWORD dwExStyle; //Window Extended Style
DWORD dwStyle; //Window Style
RECT WindowRect; //Grabs Rectangle Upper Left /Lower Right Values
WindowRect.left=(long)0; //Set Left Value To 0
WindowRect.right=(long)width; //Set Right Value To Requested Width
WindowRect.top=(long)0; //Set Top Value To 0
WindowRect.bottom=(long)height; //Set Bottom Value To Requested Height
hInstance = GetModuleHandle(NULL); //Grab An Instance For Our Window
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; //Redraw On Size, And Own DC For Window.
wc.lpfnWndProc = (WNDPROC) WndProc; //WndProc Handles Messages
wc.cbClsExtra = 0; //No Extra Window Data
wc.cbWndExtra = 0; //No Extra Window Data
wc.hInstance = hInstance; //Set The Instance
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); //Load The Default Icon
wc.hCursor = LoadCursor(NULL, IDC_ARROW); //Load The Arrow Pointer
wc.hbrBackground = NULL; //No Background Required For GL
wc.lpszMenuName = NULL; //We Don't Want A Menu
wc.lpszClassName = "OpenGL"; //Set The Class Name
if (!RegisterClass(&wc)) //Attempt To Register The Window Class
{
MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false; //Return FALSE
}
dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; //Window Extended Style
dwStyle=WS_OVERLAPPEDWINDOW; //Windows Style
AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle); //Adjust Window To True Requested Size
//Create The Window
if (!(hWnd=CreateWindowEx( dwExStyle, //Extended Style For The Window
"OpenGL", //Class Name
title, //Window Title
dwStyle | //Defined Window Style
WS_CLIPSIBLINGS | //Required Window Style
WS_CLIPCHILDREN, //Required Window Style
0, 0, //Window Position
WindowRect.right-WindowRect.left, //Calculate Window Width
WindowRect.bottom-WindowRect.top, //Calculate Window Height
NULL, //No Parent Window
NULL, //No Menu
hInstance, //Instance
NULL))) //Dont Pass Anything To WM_CREATE
{
KillGLWindow(); //Reset The Display
MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false; //Return FALSE
}
static PIXELFORMATDESCRIPTOR pfd= //pfd Tells Windows How We Want Things To Be
{
sizeof(PIXELFORMATDESCRIPTOR), //Size Of This Pixel Format Descriptor
1, //Version Number
PFD_DRAW_TO_WINDOW | //Format Must Support Window
PFD_SUPPORT_OPENGL | //Format Must Support OpenGL
PFD_DOUBLEBUFFER, //Must Support Double Buffering
PFD_TYPE_RGBA, //Request An RGBA Format
24, //Select Our Color Depth
0, 0, 0, 0, 0, 0, //Color Bits Ignored
0, //No Alpha Buffer
0, //Shift Bit Ignored
0, //No Accumulation Buffer
0, 0, 0, 0, //Accumulation Bits Ignored
24, //24Bit Z-Buffer (Depth Buffer)
0, //No Stencil Buffer
0, //No Auxiliary Buffer
PFD_MAIN_PLANE, //Main Drawing Layer
0, //Reserved
0, 0, 0 //Layer Masks Ignored
};
if (!(hDC=GetDC(hWnd))) //Did We Get A Device Context?
{
KillGLWindow(); //Reset The Display
MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false; //Return FALSE
}
if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd))) //Did Windows Find A Matching Pixel Format?
{
KillGLWindow(); //Reset The Display
MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false; //Return FALSE
}
if(!SetPixelFormat(hDC,PixelFormat,&pfd)) //Are We Able To Set The Pixel Format?
{
KillGLWindow(); //Reset The Display
MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false; //Return FALSE
}
if (!(hRC=wglCreateContext(hDC))) //Are We Able To Get A Rendering Context?
{
KillGLWindow(); //Reset The Display
MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false; //Return FALSE
}
if(!wglMakeCurrent(hDC,hRC)) //Try To Activate The Rendering Context
{
KillGLWindow(); //Reset The Display
MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
return false; //Return FALSE
}
ShowWindow(hWnd,SW_SHOW); //Show The Window
SetForegroundWindow(hWnd); //Slightly Higher Priority
SetFocus(hWnd); //Sets Keyboard Focus To The Window
reshape(width, height); //Set Up Our Perspective GL Screen
init();
return true; //Success
}
Vous devez vous connecter pour publier un commentaire.
La
WS_OVERLAPPEDWINDOW
style comprend laWS_THICKFRAME
style qui, je pense, est responslible pour faire de votre fenêtre redimensionnables.Envisager quelque chose comme
AdjustWindowRectEx
ne semble pas fonctionner correctement siWS_THICKFRAME
n'est pas dans le style.::SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE)&~WS_SIZEBOX);
Vous pouvez utiliser WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME
Le XOR sera tout garder en WS_OVERLAPPEDWINDOW, sauf pour WS_THICKFRAME
Vous pouvez essayer quelque chose comme ceci:
Seulement désactiver le redimensionnement en faisant glisser le bord des fenêtres.
Par la voie, WS_SIZEBOX est le même que WS_THICKFRAME en raison de
Si vous utilisez
WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU
, il désactiver à la fois de maximiser et de redimensionnement.Changer votre style de fenêtre de WS_OVERLAPPEDWINDOW, par exemple, WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX. En d'autres termes, c'est overlappedwindow moins le thickframe (redimensionnable frontière) et la maxbox.
Processus de la WM_SIZING message et remplacer toutes les tentatives pour changer la fenêtre du rectangle.
Qui fonctionne pour moi, mais au lieu d'utiliser
utiliser uniquement
WS_OPERLAPPEDWINDOW ^ WS_THICKFRAME
.