|
|
|
CDialog и кнопка Cancel
|
|||
|---|---|---|---|
|
#18+
Есть модальный диалог, у него есть разные контролы, и вот при нажатии на одну кнопку мне нужно повесить часы и ждать завершения какого-то события, но нужно, чтобы одна кнопка Cancel была всегда доступна и на нее можно было нажать и прекратить ту опреацию, которую ждал. Как разрешить нажимать одну конопку при часах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 19:03 |
|
||
|
CDialog и кнопка Cancel
|
|||
|---|---|---|---|
|
#18+
Ну напрашивается решение с отдельной нитью на "процессе", т.е. при нажатии на нужный контрол, дизаблиш все контролы кроме "Cancel", взводиш семафор и запускаешь свой процесс (внутри процесса проверяешь семафор (ну я думаю что там все же цикл какой-нибудь)), при нажатии на "Cancel" сбрасываешь этот семафор, процесс видит что семафор сброшен и прекращает свою пагубную жизнедеятельность ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 19:10 |
|
||
|
CDialog и кнопка Cancel
|
|||
|---|---|---|---|
|
#18+
при наличии цикла можно обойтись и без процесса, в цикле просто помещаешь обработку виндовых сообщений (GetMessage()/DispatchMessage()) и нет проблем. если я правильно понял конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 19:24 |
|
||
|
CDialog и кнопка Cancel
|
|||
|---|---|---|---|
|
#18+
Если можно подробнее, что обрабатывать в цикле: (GetMessage()/DispatchMessage()) Замечу, что часы висят в это время, т.е. CWaitcursor. А то, чего я жду - это несколько thread'ов, которые запускаются параллельно, но в конце функции я жду окончания всех. Это объяснимо, поскольку это все хранимы процедуры SQL Server. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 19:28 |
|
||
|
CDialog и кнопка Cancel
|
|||
|---|---|---|---|
|
#18+
в цикле нужно обрабатывать виндовые сообщения. типа - while (GetMessage()) DispatchMessage(); точнее сейчас не скажу, поскольку нахожусь в командировке, сижу в офисе, занимаюсь ерундой, скоро поезд эта конструкция позволяет обойтись синхронным выполнением действий (если есть цикл), без создания ф-ии потока - лишь созданием ф-ии, в которой будет выполняться хранимая процедура. в случае наличия нескольких подобных процедур можно использовать и потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 21:06 |
|
||
|
CDialog и кнопка Cancel
|
|||
|---|---|---|---|
|
#18+
1.Создай свой класс, наследуемый от CButton, перехватывай MOUSE_NCMOVE. Когда курсор над кпопкой, меняй его. 2.Создай свой курсор, похожий на часики, и сам обрабатывай его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 09:39 |
|
||
|
CDialog и кнопка Cancel
|
|||
|---|---|---|---|
|
#18+
Winnipuh, видимо maratka имел ввиду нечто подобное Код: plaintext 1. 2. 3. 4. 5. 6. 7. На мой взгляд в вашем случае решение, предлженное olk-ом, более уместно. Фактически при нажатии на кнопку (назовем ее Run) должен создаться некий управляющий поток, имеющий handle окна диалога (hwnd), который в свою очередь порождает все ваши рабочие потоки и полностью управляет ими - завершается по их полном завершении (семафор или набор событий), либо прерывает их в случае своего прерывания (событие). На выходе из управляющего потока SendMessage(hwnd, enable,...); А вот, что предложил Tracer? . По-моему это решение совсем другой задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2003, 11:18 |
|
||
|
CDialog и кнопка Cancel
|
|||
|---|---|---|---|
|
#18+
Я бы сделал так: Если время измеряется порядком 100 мс или больше, и не сильно критична дельта времени... По кнопке Run задизаблил все контролы, завёл бы таймер на 10-20 мс и вставил бы туда проверку события . Проще чем сред открывать и делать цикл обработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 11:12 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32333517&tid=2035732]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 376ms |

| 0 / 0 |
