Попытка заменить предварительный просмотр миниатюр на панели задач изображением костюма приводит к сбою приложения другими способами - PullRequest
0 голосов
/ 03 августа 2020

Итак, я проводил какое-то исследование примерно как год go и остановился из-за моего учебы и экзаменов, но теперь я пытаюсь продолжить свои исследования, чтобы изображение костюма появлялось в предварительном просмотре эскиза панели задач вместо Windows -сгенерированный.

Я нашел, как его изменить, но он просто обрезает предварительный просмотр формы, не заменяя его новым, но, к счастью, похоже, что я нашел два ответа: один на C ++ From SO Этот пост в C# Который перенаправляет меня на Этот пост , который все равно не работал, но сообщение, которое я нашел сегодня, работает Я могу создать эскиз костюма, но образец пришел с кодом работает отлично, но в моем приложении это не так, я имею в виду, что он генерирует эскиз, но я не могу минимизировать, развернуть, закрыть, перетащить или восстановить приложение. Я пытался сам обрабатывать события, и это сработало для минимизации, максимизации, закрытия и восстановления, но не для перетаскивания, образец не должен обрабатывать ничего, только эскизное изображение, вот сообщение Это в C#, вот альтернатива VB. NET:

Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports Microsoft.WindowsAPICodePack.Taskbar

Namespace CustomToolbarButtons

    Public Partial Class Form1


        Inherits Form
 
        Private infoButton As ThumbnailToolbarButton
 
        Public Sub New()
            InitializeComponent()
        End Sub
 
        Protected Overrides Sub OnShown(ByVal e As EventArgs)
            MyBase.OnShown(e)
            infoButton = New ThumbnailToolbarButton(SystemIcons.Information, "Information")
            infoButton.Click += AddressOf infoButton_Click
            TaskbarManager.Instance.ThumbnailToolbars.AddButtons(Me.Handle, infoButton)
        End Sub
 
        Private Sub infoButton_Click(ByVal sender As Object, ByVal e As ThumbnailButtonClickedEventArgs)
            MessageBox.Show("Show Application Information")
        End Sub
    End Class
End Namespace

события эскизов: TabbedThumbnailBitmapRequested; TabbedThumbnailActivated; TabbedThumbnailClosed; TabbedThumbnailMaximized; TabbedThumbnailMinimized; TitleChanged; TooltipChanged.

Я не знаю, почему мое приложение ведет себя так, я использую некоторые функции панели задач, такие как установка значения прогресса, состояния выполнения, наложения, кнопок панели задач, но я не вижу где моя проблема с генерацией миниатюр. Дайте мне знать, если вам понадобится какая-либо информация. Обновление: мне удалось собрать рабочий код и протестировать его в новом проекте winforms, и он действительно сработал, но по-прежнему размещение его в основном проекте приложения вызовет проблему, указанную выше в вопросе, я не отменяю никаких событий для формы. Вот новый код:

 Dim WithEvents customThumbnail As TabbedThumbnail = Nothing
    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        customThumbnail = New TabbedThumbnail(Me.Handle, Me.Handle)
        TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(customThumbnail)
    End Sub
    Private Function GenerateBitmap() As Bitmap
        Dim OrBit As New Bitmap(250, 100)
        Dim Bit As New Bitmap(Image.FromFile("D:\Pictures\CarteBlancheDJSNAKE.png"), New Size(100, 100))
        Using Gr = Graphics.FromImage(OrBit)
            Gr.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
            Gr.DrawImage(Bit, New Point(0, 0))
            Gr.DrawString("Physical", New Font("Calibri", 14, FontStyle.Regular), New SolidBrush(Color.Black), New PointF(100, 60))
            Gr.DrawString("Dua Lipa", New Font("Calibri", 12, FontStyle.Regular), Brushes.Black, New PointF(100, 80))
            Gr.DrawString("00:00/00:00", New Font("Calibri", 9, FontStyle.Italic), Brushes.Black, New PointF(185, 85))
        End Using
        Return OrBit
    End Function

    Private Sub customThumbnail_TabbedThumbnailBitmapRequested(ByVal sender As Object, ByVal e As TabbedThumbnailBitmapRequestedEventArgs) Handles customThumbnail.TabbedThumbnailBitmapRequested
        Dim bitmap = GenerateBitmap()
        customThumbnail.SetImage(bitmap)
        ThreadPool.QueueUserWorkItem(Sub(c)
                                         Thread.Sleep(1000)
                                         Me.Invoke(New MethodInvoker(AddressOf InvalidateThumbnail))
                                     End Sub)
    End Sub

    Private Sub InvalidateThumbnail()
        customThumbnail.InvalidatePreview()
    End Sub
...