Отрисовка текста после нажатия на Button.

Тема в разделе "WASM.BEGINNERS", создана пользователем shel_nik, 7 дек 2005.

Статус темы:
Закрыта.
  1. shel_nik

    shel_nik New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    12
    Адрес:
    Russia
    Отрисовка текста после нажатия на Button.

    Мне надо нарисовать одну строку в окне до нажатия на кнопку а другую после.

    Ни чего лучше ниже проиведённого куска я придумать не смог.

    С первой строкой проблем нет,вторая строка тоже отображается но не сразу после нажатия на кнопку,

    а после каких нибудь действий с окном (свернуть, развернуть,максимизировать)

    Подскажите начинающему почему? и как это исправить?

    .data

    sem BOOL FALSE

    ....................

    .code

    ...............

    start:

    ...............

    WinMain proc

    .......................

    INVOKE CreateWindowEx,

    .............................

    ..............................

    .BREAK .IF (!eax)

    INVOKE TranslateMessage, ADDR msg

    INVOKE DispatchMessage, ADDR msg

    .ENDW

    mov eax,msg.wParam

    ret

    WinMain endp

    WndProc proc

    .IF uMsg==WM_DESTROY

    invoke PostQuitMessage,NULL

    .ELSEIF uMsg==WM_PAINT

    invoke BeginPaint,hWnd, ADDR ps

    mov hdc,eax

    invoke SetBkMode,hdc,TRANSPARENT

    invoke TextOut,hdc,65,2,ADDR TestString,SIZEOF TestString

    .IF sem ==TRUE

    invoke TextOut,hdc,65,130,ADDR TestString1,SIZEOF TestString1

    .ENDIF

    .ELSEIF uMsg==WM_CREATE

    invoke EndPaint,hWnd, ADDR ps

    invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText,\

    .............................

    mov hwndButton,eax

    .ELSEIF uMsg==WM_COMMAND

    mov eax,wParam

    .IF ax==ButtonID

    shr eax,16

    .IF ax==BN_CLICKED

    mov sem ,TRUE

    .ENDIF

    .ENDIF

    .ELSE

    invoke DefWindowProc,hWnd,uMsg,wParam,lParam

    ret

    .ENDIF

    xor eax,eax

    ret

    WndProc endp

    end start
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Ты бы оформил код по-человечески, используя тэги
    Код (Text):
    1.  




    Тебе не кажется странным, что рисование начинается по WM_PAINT, а заканчивается по WM_CREATE ?
     
  3. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Что-то мне подсказывает, что эти строки стоит поменять местами:
    Код (Text):
    1. .ELSEIF uMsg==WM_CREATE
    2. invoke EndPaint,hWnd, ADDR ps
     
  4. shel_nik

    shel_nik New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    12
    Адрес:
    Russia
    Вотже блин! поторопился задать вопрос. Ещё раз внимательно перечитал статью Iczelion "Отрисовка текста" и тутже нашёл



    ответ .

    Есть правда ещё один вопрос немного связаный с предыдущим. С " Edit " вроде всё понятно, есть такой контрол в Win32 Api



    а вот контрола Label я там не обнаружил. Тогда как чтото подобное лучше реализовать в MASM32 ?
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    static
     
  6. shel_nik

    shel_nik New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    12
    Адрес:
    Russia
    На счёт строк .ELSEIF uMsg==WM_CREATE

    invoke EndPaint,hWnd, ADDR ps

    когда из исходника вырезал лишнее и копировал в окно сообщения не туда вставил. На самом деле:

    invoke EndPaint,hWnd, ADDR ps .ELSEIF uMsg==WM_CREATE

    Так что за оформление и за ошибку извиняюсь.
     
  7. shel_nik

    shel_nik New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    12
    Адрес:
    Russia
    cresta

    Sharp

    Благодарю за ответы.

    (почти все вопросы у меня изза незнания английского - это по я по поводу "static")
     
Статус темы:
Закрыта.