Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Common Control'ы (Проблема с назначением шрифта) 
:(
    Опции темы
cdman
Дата 10.12.2010, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009
Где: Новосибирск

Репутация: нет
Всего: нет



Люди, всем привет !
 Я не могу разобраться со строкой редактирования, слабовато понимаю, пошаговые действия с назначением какого-нибудь шрифта, например Comic sans (Нужен высотой в 20 пикселей).
Подскажите пожалуйста, какие функции WIN API использовать. Могу бросить текст. Но пока не буду. Может вы что-нибудь предложите?

PM MAIL ICQ Skype   Вверх
586
Дата 11.12.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Цитата(cdman @  10.12.2010,  21:05 Найти цитируемый пост)
Подскажите пожалуйста, какие функции WIN API использовать.

CreateFontIndirect и SendMessage(WM_SETFONT).
PM   Вверх
cdman
Дата 11.12.2010, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009
Где: Новосибирск

Репутация: нет
Всего: нет



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
Огромное спасибо за ответы.
PM MAIL ICQ Skype   Вверх
cdman
Дата 11.12.2010, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009
Где: Новосибирск

Репутация: нет
Всего: нет



Вот накатал это, но текст в строку редактирования не пишется вообще. Что может быть ?

    .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

Это сообщение отредактировал(а) cdman - 11.12.2010, 18:50
PM MAIL ICQ Skype   Вверх
586
Дата 11.12.2010, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Это из какого места программы кусок?
PM   Вверх
cdman
Дата 11.12.2010, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009
Где: Новосибирск

Репутация: нет
Всего: нет



 Делаю журнал трейдера (Под себя), раньше много программил под DOS, писал архиваторы, игрушки простенькие (Тетрис, Lines). Под винду пока ещё немного не привычно.
У Тебя есть Скайп ? Мой cdman__x . Добавляйся потрещим.
PM MAIL ICQ Skype   Вверх
586
Дата 11.12.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



В коде содержатся ещё и другие ошибки:
Ошибка 1:
Цитата(cdman @  11.12.2010,  17:04 Найти цитируемый пост)
    invoke    GetCommandLine
    invoke    WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT

Между этими строками пропущено mov CommandLine, eax
Ошибка 2:
Структура WNDCLASSEX заполняется не полностью (не инициализирован wc.lpszMenuName).

Код
    .686P
    .model flat,stdcall
    option casemap:none
    include windows.inc
    include user32.inc
    include kernel32.inc
    include gdi32.inc
    include comdlg32.inc
    include shell32.inc
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 ?
hBrushBk         dd ?
.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
    mov CommandLine, eax
    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
    mov wc.lpszMenuName, 0
    invoke    RegisterClassEx,addr wc
invoke CreateWindowEx,0,ADDR ClassName,ADDR FormCaption,WS_SYSMENU or WS_SIZEBOX,200,200,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 DeleteObject, hFont
        invoke DeleteObject, hBrushBk
        invoke    PostQuitMessage,NULL
    .ELSEIF uMsg == WM_CREATE
     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    CreateFontA,18,0,0,0,FW_BOLD,0,0,0, 1,64,0,2,0 + 0, offset [lpFontName1]
     mov        hFont,eax
     invoke    SendMessage, hwndTicker, WM_SETFONT, hFont, 0

     RGB 0,0,255
     invoke CreateSolidBrush, eax
     mov hBrushBk, eax

    .ELSEIF uMsg == WM_CTLCOLOREDIT
     RGB        200,200,50
     invoke    SetTextColor,wParam,eax
     RGB        0,0,255
     invoke    SetBkColor,wParam,eax

     mov eax, hBrushBk
     ret
    .ELSE
        invoke    DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
    .ENDIF
    xor        eax,eax
    ret
WndProc endp
end start


PM   Вверх
cdman
Дата 11.12.2010, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009
Где: Новосибирск

Репутация: нет
Всего: нет



wc.lpszMenuName относиться к ресурсам, я пока в такие дебри не лез. Его обязательно задавать ?

Добавляйся.
PM MAIL ICQ Skype   Вверх
586
Дата 11.12.2010, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Цитата(cdman @  11.12.2010,  19:42 Найти цитируемый пост)
wc.lpszMenuName относиться к ресурсам, я пока в такие дебри не лез. Его обязательно задавать ?

Я уже исправил это в коде. Посмотри два исходника с сравни.

Это сообщение отредактировал(а) 586 - 11.12.2010, 20:01
PM   Вверх
cdman
Дата 11.12.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009
Где: Новосибирск

Репутация: нет
Всего: нет



Сейчас разберу, спасибо за поддержку !
PM MAIL ICQ Skype   Вверх
cdman
Дата 12.12.2010, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009
Где: Новосибирск

Репутация: нет
Всего: нет



Привет 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)  в заданный код цвета. 


Это сообщение отредактировал(а) cdman - 12.12.2010, 13:21
PM MAIL ICQ Skype   Вверх
500mhz
  Дата 12.12.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



господа вам не кажется что мы в 2010 (почти в 2011) и все что выше понаписано можно сделать в редакторе ресурсов?


--------------------

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.