Другие языки программирования и технологии
C++ Win32 API - Как создать окно фиксированного размера?
Собственно, создаётся главное окно: как сделать его конкретным расмером (допустим, 640x480) и сделать невозможным его растягивание, то есть размер всегда фиксированный?
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
hwnd = CreateWindowEx(0, "WindowClass", "WinApp",
WS_VISIBLE| WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
640, 480, NULL, NULL, hInstance, NULL);
if(hwnd == NULL) {
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
while(GetMessage(&Msg, NULL, 0, 0) > 0) { /* If no error is received... */
TranslateMessage(&Msg); /* Translate key codes to chars if present */
DispatchMessage(&Msg); /* Send it to WndProc */
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
hwnd = CreateWindowEx(0, "WindowClass", "WinApp",
WS_VISIBLE| WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
640, 480, NULL, NULL, hInstance, NULL);
if(hwnd == NULL) {
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
while(GetMessage(&Msg, NULL, 0, 0) > 0) { /* If no error is received... */
TranslateMessage(&Msg); /* Translate key codes to chars if present */
DispatchMessage(&Msg); /* Send it to WndProc */
}
return Msg.wParam;
}
Вот так. http://pastebin.com/8t7vjpTh
Procedure WindowCallback(hWnd, Msg, wParam, lParam)
Select Msg
Case #WM_CLOSE
DestroyWindow_(hWnd)
Case #WM_DESTROY
PostQuitMessage_(0) : Result = 0
Default
Result = DefWindowProc_(hWnd, Msg, wParam, lParam)
EndSelect
ProcedureReturn Result
EndProcedure
InitCommonControls_()
DefaultFont = GetStockObject_(#DEFAULT_GUI_FONT)
WindowClass.s = "PureBasic_Win"
wc.WNDCLASSEX
wc\cbsize = SizeOf(WNDCLASSEX)
wc\lpfnWndProc = @WindowCallback()
wc\hCursor = LoadCursor_(0, #IDC_ARROW)
wc\hbrBackground = #COLOR_WINDOW
wc\lpszClassName = @WindowClass
RegisterClassEx_(@wc)
hWndMain = CreateWindowEx_(0, WindowClass, "", #WS_SYSMENU | #WS_MINIMIZEBOX, 100, 100, 640, 480, 0, 0, 0, 0)
ShowWindow_(hWndMain, #SW_SHOWDEFAULT)
UpdateWindow_(hWndMain);
While GetMessage_(msg.MSG, #Null, 0, 0 )
TranslateMessage_(msg)
DispatchMessage_(msg)
Wend
End
Procedure WindowCallback(hWnd, Msg, wParam, lParam)
Select Msg
Case #WM_CLOSE
DestroyWindow_(hWnd)
Case #WM_DESTROY
PostQuitMessage_(0) : Result = 0
Default
Result = DefWindowProc_(hWnd, Msg, wParam, lParam)
EndSelect
ProcedureReturn Result
EndProcedure
InitCommonControls_()
DefaultFont = GetStockObject_(#DEFAULT_GUI_FONT)
WindowClass.s = "PureBasic_Win"
wc.WNDCLASSEX
wc\cbsize = SizeOf(WNDCLASSEX)
wc\lpfnWndProc = @WindowCallback()
wc\hCursor = LoadCursor_(0, #IDC_ARROW)
wc\hbrBackground = #COLOR_WINDOW
wc\lpszClassName = @WindowClass
RegisterClassEx_(@wc)
hWndMain = CreateWindowEx_(0, WindowClass, "", #WS_SYSMENU | #WS_MINIMIZEBOX, 100, 100, 640, 480, 0, 0, 0, 0)
ShowWindow_(hWndMain, #SW_SHOWDEFAULT)
UpdateWindow_(hWndMain);
While GetMessage_(msg.MSG, #Null, 0, 0 )
TranslateMessage_(msg)
DispatchMessage_(msg)
Wend
End
Бродяга Бородач
А можно комментарии? А то у меня походу вообще аж синтаксис другой
Похожие вопросы
- C++ Win32 API Какой функцией получить открытые в текущий момент окна?
- Подскажите, как написать скрипт, который открывает ссылку в окне определенного размера. спасибо
- Как правильно создать и использовать radiobutton-ы на win api c++ ?Можно ли из программы узнать версию Windows ?
- C++. Как создать Пустой проект консольного приложения Win32? После обновления VS не знаю как создать
- что за The thread 'Win32 Thread' (0xf00) has exited with code 0 (0x0) при написании на visual studia 2008 c++ под windos
- Как самому создать приложение для Android если есть API или виджет для сайта?
- Подскажите как задать размер окна браузера
- Как динамически расширять программы для платформы win32 написанные на C++?
- Win api ОКНА
- Определение размера файла в Borland C++