Самый быстрый способ реализовать Экран-заставку Win32 C++

1) dplyr / tidyr Предполагая, что ввод DF такой же, как в примечании, в конце создайте столбец Transcriber со значениями Transcriber1 и Transcriber2 и столбец Seq с последовательностью числа и, наконец, использовать spread для преобразования в широкую форму.

library(dplyr)
library(tidyr)

DF %>%
  group_by(Code) %>%
  mutate(Transcriber = as.numeric(factor(Transcriber, levels = unique(Transcriber)))) %>%
  group_by(Transcriber = paste0("Transcriber", Transcriber), add = TRUE) %>%
  mutate(Seq = seq_along(Errors)) %>%
  ungroup %>%
  spread(Transcriber, Errors) %>%
  select(-Seq)

дает:

# A tibble: 14 x 3
    Code Transcriber1 Transcriber2
   <dbl>        <int>        <int>
 1  1011            1            8
 2  1011            2            9
 3  1011            3           10
 4  1011            4           11
 5  1011            5           12
 6  1011            6           13
 7  1011            7           14
 8  2011           15           22
 9  2011           16           23
10  2011           17           24
11  2011           18           25
12  2011           19           26
13  2011           20           27
14  2011           21           28

2) База R Решение, использующее только базу R, будет:

make_factor <- function(x) factor(x, levels = unique(x))
DF2 <- transform(DF, 
  Transcriber = paste0("Transcriber", ave(as.numeric(Transcriber), Code, FUN = make_factor)),
  Seq = ave(Errors, Code, Transcriber, FUN = seq_along))
r <- reshape(DF2, dir = "wide", idvar = c("Seq", "Code"), timevar = "Transcriber")[-2]
names(r) <- sub("Errors.", "", names(r))

Примечание

[ 1114] Вход в воспроизводимом виде предполагается:

DF <- data.frame(Code = rep(c(1011, 2011), each = 14), 
  Transcriber = rep(c("Anna", "David", "Susan", "Anna"), each = 7),
  Errors = 1:28)
8
задан Vertexwahn 4 March 2016 в 16:16
поделиться

6 ответов

Вы можете:

  • Создайте диалоговое окно в своем файле ресурсов
  • Имейте его, содержат управление Изображением
  • Установите тип управления изображением для Побитового отображения
  • Создайте/импортируйте свой битовый массив в файле ресурсов и установите тот растровый идентификатор на управление изображением в Вашем диалоговом окне
  • Создайте окно при помощи CreateDialogParam
  • Обработайте WM_INITDIALOG для установки таймера в течение 10 секунд (используйте SetTimer),
  • Обработайте WM_TIMER для ловли события таймера, и уничтожать окно (используйте DestroyWindow),
1
ответ дан 5 December 2019 в 13:02
поделиться

При предназначении для современных версий Windows (Windows 2000) и выше можно использовать функцию UpdateLayeredWindow для отображения любого битового массива (включая один с альфа-каналом, раз так желаемым).

Я занес серию из четырех частей в блог о том, как записать приложение Win32 C++, которое делает это. Если необходимо ожидать в течение точно десяти секунд для закрытия экрана-заставки (вместо того, пока главное окно не готово), необходимо было бы использовать предложенный метод Dan Cristoloveanu таймера, который называет DestroyWindow.

6
ответ дан 5 December 2019 в 13:02
поделиться

Зарегистрируйте класс для окна всплеска и создайте окно с помощью этих стилей:

  • WS_POPUPWINDOW: удостоверится, что Ваше окно не имеет никакого caption/sysmenu
  • WS_EX_САМЫЙ ВЕРХНИЙ: сохранит экран-заставку сверху всего. Обратите внимание, что это немного навязчиво. Могло бы быть лучше просто сделать окно всплеска ребенком Вашего главного окна. Вам, вероятно, придется управлять z-порядком, тем не менее, для хранения любых других всплывающих окон (при создании кого-либо) ниже экрана-заставки.

Используйте CreateDIBSection для загрузки битового массива. Это должно быть легко, так как файлы BMP являются по существу дампами структур DIB. Или сделайте то, что сказал Ken, и используйте LoadImage.

Обработайте WM_КРАСКА или WM_ERASEBKGND обмениваются сообщениями для рисования битового массива на окне.

На WM_СОЗДАЙТЕ устанавливает таймер 10 секунд и когда Windows отправляет WM_Сообщение ТАЙМЕРА, имейте окно, уничтожают себя.

2
ответ дан 5 December 2019 в 13:02
поделиться

Ключевой пункт здесь должен использовать разделенное на уровни окно.

Можно запустить с win32 мастера сгенерированный проект и изменить вызов CreateWindow на CreateWindowEx и установить WS_EX_LAYERED как расширенный стиль окна и комбинацию WS_POPUP и WS_SYSMENU как стиль окна. Когда Вы делаете, которые запускают Ваше приложение, это будет невидимо. Затем необходимо использовать UpdateLayeredWindow для рисования изображения. Вам, возможно, также понадобится функция AlphaBlend, если Вы хотите, используют изображение PNG с альфа-слоем.

Надеюсь, это поможет!

2
ответ дан 5 December 2019 в 13:02
поделиться
  • Используйте LoadImage для загрузки битового массива
  • Используйте CreateWindowEx для создания окна.
  • В окне proc получают WM_PAINT. Используйте BitBlt для рисования битового массива.
1
ответ дан 5 December 2019 в 13:02
поделиться

Это - API Win32 FAQ

Посмотрите профессиональный форум Win32api news://194.177.96.26/comp.os.ms-windows.programmer.win32, где ему отвечали на сотни времен в течение 20 лет..

1
ответ дан 5 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: