Что-то я непойму ребята, собрал исходник, а он вообще не фурычит, толи лыжи не едут.... Есть несколько вопросов: создаю контролы в ресурсе, в NewPosition позиция скролбара, при этом в обработке WM_PAINT где бы я его не вставлял - он всегда равен нулю !!?, а например при вызове SetControlsPosition NewPosition нормально работает (тому пример второй скролбар), и еще меня вгоняют в ступор строки при обработке WM_HSCROLL: Код (Text): mov eax,aParam and eax,0FFFFh Даже поставил RoundedPath из другого исходника, добавил параметр и передавал туда NewPosition, один хрен, картинка остаётся неподвижной а второй скролбар нагло шевелиться...Объясните - почему ?.... Код (Text): .486 .model flat,stdcall option casemap:none ; case sensitive ; #################################################### include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\comctl32.incinclude \masm32\include\gdi32.inc include \masm32\include\comdlg32.inc include \masm32\include\shell32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\comctl32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\comdlg32.lib includelib \masm32\lib\shell32.lib ; #################################################### ID_SCROLLBAR1 equ 301 ID_SCROLLBAR2 equ 302 ; -------------------------------------------------------- ControlsMadness PROTO :DWORD,:DWORD,:DWORD,:DWORD SetControlsPosition PROTO :DWORD RoundedPath PROTO :DWORD, :DWORD ; -------------------------------------------------------- .data hInstance dd ? NewPosition dd 0 NPosPaint dd 0 hPen dd 0 oldPen dd 0 PathRound db "Rounded Path",0 dlgname db "CONTROLS",0 .data? icex INITCOMMONCONTROLSEX <> ;structure for Controls ; ############################################################### .code start: ; ############################################################### invoke GetModuleHandle,NULL mov hInstance,eax mov icex.dwSize,sizeof INITCOMMONCONTROLSEX mov icex.dwICC,0FFFFh invoke InitCommonControlsEx,ADDR icex ; --------------------------------------------- ; Call the dialog box stored in resource file ; --------------------------------------------- invoke DialogBoxParam,hInstance,ADDR dlgname,0,ADDR ControlsMadness,0 invoke ExitProcess,eax ; ############################################################### ControlsMadness proc hWin:DWORD,uMsg:DWORD,aParam:DWORD,bParam:DWORD LOCAL hDC:DWORD LOCAL rct:RECT LOCAL ps:PAINTSTRUCT .if uMsg == WM_INITDIALOG invoke SendDlgItemMessage,hWin,ID_SCROLLBAR1,SBM_SETRANGE,0,500 invoke SendDlgItemMessage,hWin,ID_SCROLLBAR2,SBM_SETRANGE,0,100 invoke SetFocus,hWin .elseif uMsg == WM_COMMAND .ELSEIF uMsg == WM_PAINT invoke BeginPaint,hWin,ADDR ps mov hDC,eax ;----------------------------------- invoke SetMapMode,hDC,MM_ANISOTROPIC invoke SetWindowExtEx,hDC,100,100,0 invoke GetClientRect,hWin,ADDR rct invoke SetViewportExtEx,hDC,rct.right,rct.bottom,0 ;------------------------------------------------- invoke RoundedPath, hDC, NewPosition .elseif uMsg == WM_CLOSE invoke EndDialog,hWin,NULL .elseif uMsg == WM_HSCROLL mov eax,aParam and eax,0FFFFh .if eax == TB_THUMBPOSITION ; Same as SB_THUMBPOSITION mov eax,aParam shr eax,16 mov NewPosition,eax invoke SetControlsPosition,hWin .elseif eax == TB_THUMBTRACK ; Same as SB_THUMBTRACK mov eax,aParam shr eax,16 mov NewPosition,eax invoke SetControlsPosition,hWin .elseif eax == SB_LINEUP .if NewPosition != 0 dec NewPosition .endif invoke SetControlsPosition,hWin .elseif eax == SB_LINEDOWN .if NewPosition != 100 inc NewPosition .endif invoke SetControlsPosition,hWin .endif .endif xor eax,eax ret ControlsMadness endp ; ############################################################### SetControlsPosition proc hWin:DWORD invoke SendDlgItemMessage,hWin,ID_SCROLLBAR1,SBM_SETPOS,NewPosition,TRUE invoke SendDlgItemMessage,hWin,ID_SCROLLBAR2,SBM_SETPOS,NewPosition,TRUE ret SetControlsPosition endp ; ############################################################### RoundedPath proc hDC:DWORD, pCOORD:DWORD LOCAL lb:LOGBRUSH mov lb.lbStyle,BS_SOLID mov lb.lbColor,00000FFh mov lb.lbHatch,0 invoke ExtCreatePen,PS_SOLID or PS_GEOMETRIC or PS_ENDCAP_ROUND or PS_JOIN_ROUND,10,ADDR lb,0,0 mov hPen,eax invoke SelectObject,hDC,hPen mov oldPen,eax ;------------------- ; Build the GDI Path ;------------------- invoke BeginPath,hDC invoke MoveToEx,hDC,10,25,0 invoke LineTo,hDC,20,pCOORD invoke LineTo,hDC,pCOORD,25 invoke EndPath,hDC ;---------------------- ; Render the built Path ;---------------------- invoke StrokePath,hDC invoke DeleteObject,hPen ;--------------------------------- ; Draw black lines inside the Path ;--------------------------------- invoke GetStockObject,BLACK_PEN invoke SelectObject,hDC,eax invoke MoveToEx,hDC,10,25,0 invoke LineTo,hDC,20,pCOORD invoke LineTo,hDC,pCOORD,25 ;-------------------------- ; Describe the type of Path ;-------------------------- invoke TextOut,hDC,11,10,ADDR PathRound,12 invoke SelectObject,hDC,oldPen ret RoundedPath endp ; ######################################################################## end start
Аты чем то проверил что NewPosition всегда равно нулю? Я вот на пример не вижу поле установки контрола комманды которая бы вызывала перерисовку окна, с какой стати тебе придет сообщение WM_PAINT?
Пробовал, не помогло Код (Text): invoke SendMessage,hWin,WM_PAINT,NewPosition,0 .ELSEIF uMsg == WM_PAINT ... invoke RoundedPath, hDC, aParam
Код (Text): SetControlsPosition proc hWin:DWORD invoke SendDlgItemMessage,hWin,ID_SCROLLBAR1,SBM_SETPOS,NewPosition,TRUE invoke SendDlgItemMessage,hWin,ID_SCROLLBAR2,SBM_SETPOS,NewPosition,TRUE [b]invoke InvalidateRect,0,1[/b] ret SetControlsPosition endp Вот так попробуй