| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для Windows/Dos > Common Control'ы (Проблема с назначением шрифта) |
| Автор: cdman 10.12.2010, 21:05 |
| Люди, всем привет ! Я не могу разобраться со строкой редактирования, слабовато понимаю, пошаговые действия с назначением какого-нибудь шрифта, например Comic sans (Нужен высотой в 20 пикселей). Подскажите пожалуйста, какие функции WIN API использовать. Могу бросить текст. Но пока не буду. Может вы что-нибудь предложите? |
| Автор: 586 11.12.2010, 00:06 |
CreateFontIndirect и SendMessage(WM_SETFONT). |
| Автор: cdman 11.12.2010, 00:16 |
| Edit Line делается CreateWindowEx . Потом нужно GetDC ? Контекст нужен для задания шрифта ? Может функцией GetTextExtentPoint32 как-то можно ? The GetTextExtentPoint32 function computes the width and height of the specified string of text. http://msdn.microsoft.com/en-us/library/dd144938 Огромное спасибо за ответы. |
| Автор: cdman 11.12.2010, 17:04 |
| Вот накатал это, но текст в строку редактирования не пишется вообще. Что может быть ? .686P .model flat,stdcall option casemap:none include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\kernel32.inc include C:\masm32\include\gdi32.inc include C:\masm32\include\comdlg32.inc include C:\masm32\include\shell32.inc include I:\mbuilder\baumanets\baumanets.inc includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\kernel32.lib includelib C:\masm32\lib\gdi32.lib includelib C:\masm32\lib\comdlg32.lib includelib C:\masm32\lib\shell32.lib includelib I:\mbuilder\baumanets\baumanets.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD RGB macro red,green,blue xor eax,eax mov ah,blue shl eax,8 mov ah,green mov al,red endm szText MACRO Name,Text:VARARG LOCAL lbl jmp lbl Name db Text,0 lbl: ENDM .const TickerID equ 1 .data? hwndTicker HWND ? hInstance HINSTANCE ? CommandLine LPSTR ? hFont dd 0 .data TextTicker db "Ticker",0 ;_______________ ClassName db "mbuilder",0 BtnClName db "button",0 StatClName db "static",0 EditClName db "edit",0 LboxClName db "listbox",0 CboxClName db "combobox",0 ReditClName db "richedit",0 RichEditLib db "riched32.dll",0 FormCaption db "Form",0 lpFontName1 db "Comic Sans MS",0 TestString db "TATB",0 ;_______________ .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke GetCommandLine invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc :WNDCLASSEX LOCAL msg :MSG LOCAL hwnd :HWND mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style,CS_BYTEALIGNCLIENT mov wc.lpfnWndProc,offset WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInst pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx,addr wc invoke CreateWindowEx,0,ADDR ClassName,ADDR FormCaption,WS_SYSMENU or WS_SIZEBOX,2062,452,384,291,0,0,hInst,0 mov hwnd,eax INVOKE ShowWindow,hwnd,SW_SHOWNORMAL INVOKE UpdateWindow,hwnd .WHILE TRUE invoke GetMessage,ADDR msg,0,0,0 .BREAK .IF (!eax) invoke TranslateMessage,ADDR msg invoke DispatchMessage,ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM LOCAL hdc:HDC LOCAL ps:PAINTSTRUCT .IF uMsg == WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg == WM_CREATE invoke BeginPaint,hWnd, ADDR ps mov hdc,eax invoke CreateFontA,18,0,0,0,FW_BOLD,0,0,0, 1,64,0,2,0 + 0, offset [lpFontName1] mov hFont,eax invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR EditClName,ADDR TextTicker,WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or WS_VISIBLE,48,32,121,48,hWnd,TickerID,hInstance,0 mov hwndTicker,eax invoke SendMessage, hwndTicker, WM_SETFONT, hFont, 0 invoke SelectObject, hdc, eax mov hFont,eax RGB 200,200,50 invoke SetTextColor,hdc,eax RGB 0,0,255 invoke SetBkColor,hdc,eax invoke TextOut,hdc,0,0,ADDR TestString,SIZEOF TestString invoke SelectObject,hdc, hFont invoke EndPaint,hWnd, ADDR ps .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end startdPaint,hWnd, ADDR ps |
| Автор: 586 11.12.2010, 18:36 |
| Это из какого места программы кусок? |
| Автор: cdman 11.12.2010, 18:53 |
| Делаю журнал трейдера (Под себя), раньше много программил под DOS, писал архиваторы, игрушки простенькие (Тетрис, Lines). Под винду пока ещё немного не привычно. У Тебя есть Скайп ? Мой cdman__x . Добавляйся потрещим. |
| Автор: cdman 11.12.2010, 19:42 |
| wc.lpszMenuName относиться к ресурсам, я пока в такие дебри не лез. Его обязательно задавать ? Добавляйся. |
| Автор: 586 11.12.2010, 20:00 | ||
Я уже исправил это в коде. Посмотри два исходника с сравни. |
| Автор: cdman 11.12.2010, 20:06 |
| Сейчас разберу, спасибо за поддержку ! |
| Автор: cdman 12.12.2010, 12:21 |
| Привет 586, программил всю ночь, сделал несколько едитов, и оказалось что, цвет фона и шрифта проблематично присвоить качдому элементу. И ещё непонятно, порядок Ифов и Елсов ... Можно ли обойтись без WM_CTLCOLOREDIT. Использовать на прорисовку, освежение и изменение свойств элементов только WM_PAINT ? Сложно ... Надо научиться менять: Цвет фона Edit'а, цвет фона шрифта и цвет шрифта - всего 3 параметра. Вот тут начали обсуждать, но никуда не пришли http://forum.sources.ru/index.php?showtopic=74628 WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM LOCAL hdc:HDC LOCAL ps:PAINTSTRUCT .IF uMsg == WM_DESTROY . . .ELSEIF uMsg == WM_CREATE . . . .ELSEIF uMsg == WM_CTLCOLOREDIT . . . .ELSEIF uMsg == WM_PAINT .ELSEIF uMsg == WM_COMMAND mov eax,wParam .IF lParam != 0 .IF ax == AddDealID shr eax,16 .IF ax == BN_CLICKED invoke MessageBox,hWnd,addr TextAddDeal,0,MB_ICONINFORMATION .ENDIF .ELSEIF ax == AllTradesID shr eax,16 .IF ax == BN_CLICKED invoke MessageBox,hWnd,addr TextAllTrades,0,MB_ICONINFORMATION .ENDIF .ENDIF .ENDIF ret .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret Вот что-то к этому : SetDCBrushColor Устанавливает в текущем контексте устройства (DC) цвет кисти в заданный код цвета. SetDCPenColor Устанавливает цвет пера в текущем контексте устройства (DC) в заданный код цвета. |
| Автор: 500mhz 12.12.2010, 19:00 |
| господа вам не кажется что мы в 2010 (почти в 2011) и все что выше понаписано можно сделать в редакторе ресурсов? |