Создание окна
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Создание окна - 2011-08-09 23:45:47.850000
|
|
|
Omenus666
Сообщений: 108
Оценки: 0
Присоединился: 2008-04-11 16:44:07.336666
|
Блин мой мозг почти сломан, но я не сдаюсь! Проблема в том что окно не прорисовывается. Вот собственно исходник
.686
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive
include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\masm32.inc
include \MASM32\INCLUDE\gdi32.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
include \MASM32\INCLUDE\advapi32.inc
include \MASM32\INCLUDE\Ws2_32.inc
include \masm32\INCLUDE\wsock32.inc
includelib \MASM32\LIB\masm32.lib
includelib \MASM32\LIB\gdi32.lib
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\advapi32.lib
includelib \MASM32\LIB\Ws2_32.lib
includelib \masm32\lib\wsock32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
.data
Mname DB "CLIENT",0
ClassName db "First Windows",0
.data?
hInstance dd ?
CommandLine LPSTR ?
.code
Start:
;=========Прорисовка окна============
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOW
invoke ExitProcess, eax
WinMain PROC hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX ; создание локальных пеpеменных в стеке
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.style,sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
invoke LoadIcon,hInstance,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,hInstance,IDI_HAND
mov wc.hCursor,eax
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,offset ClassName
invoke RegisterClass,addr wc
invoke CreateWindowEx,NULL,addr ClassName,addr Mname,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL
mov hwnd,eax
invoke ShowCursor,TRUE
invoke ShowWindow,hwnd,CmdShow
invoke UpdateWindow, hwnd
.WHILE TRUE ; Enter message loop
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam ; сохpанение возвpащаемого значения в eax
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY ; если пользователь закpывает окно
invoke PostQuitMessage,NULL ; выходим из пpогpаммы
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; Дефаултная функция обpаботки окна
ret
.ENDIF
xor eax,eax
ret
WndProc endp
end Start
На количество либ не обращайте внимание я просто еще с сокетами работал и вот решил создать окно а тут такой облом В чем проблема?
|
|
|
RE: Создание окна - 2011-08-10 10:09:18.313333
|
|
|
Flint_ta
Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
|
Две ошибки нашел: У вас в стиль окна передается размер структуры WNDCLASSEX
mov wc.style,sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
исправьте на:
mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
Вторая ошибка: вы объявляете расширенную струтуру WNDCLASSEX, о чем свидетельствует суффикс EX, для работы с ней нужно использовать расширенные апи RegisterClassExA, вместо RegisterClass исправьте:
invoke RegisterClass,addr wc
на
invoke RegisterClassExA,addr wc;
|
|
|
RE: Создание окна - 2011-08-10 13:51:44.433333
|
|
|
Omenus666
Сообщений: 108
Оценки: 0
Присоединился: 2008-04-11 16:44:07.336666
|
спасибо!! Ошибки не существенны а столько гемора!!
|
|
|
|
|