Как создать окно, имеющее форму эллипса с VC ++ использование win32 API

Более эффективный путь, по-моему, состоит в том, чтобы иметь другой список, что Вы объявляете помещение чего-либо, что должно "быть удалено" в. Тогда после окончания основного цикла (без.ToList ()), Вы переделываете другой цикл, "чтобы быть удаленными" список, удаляя каждую запись, как это происходит. Таким образом в Вашем классе Вы добавляете:

private List<Guid> toBeRemoved = new List<Guid>();

Тогда Вы изменяете его на:

public void NotifySubscribers(DataRecord sr)
{
    toBeRemoved.Clear();

    ...your unchanged code skipped...

   foreach ( Guid clientId in toBeRemoved )
   {
        try
        {
            subscribers.Remove(clientId);
        }
        catch(Exception e)
        {
            System.Diagnostics.Debug.WriteLine("Unsubscribe Error " + 
                e.Message);
        }
   }
}

...your unchanged code skipped...

public void UnsubscribeEvent(Guid clientId)
{
    toBeRemoved.Add( clientId );
}

Это не только решит Вашу проблему, она будет препятствовать тому, чтобы Вы имели, чтобы продолжать создавать список из Вашего словаря, который является дорогим, если существует много подписчиков там. Принятие списка подписчиков, которые будут удалены на любом данном повторении, ниже, чем общее количество в списке, это должно быть быстрее. Но, конечно, не стесняйтесь представлять его, чтобы быть уверенными, что это имеет место, если существует сомнение в Вашей определенной ситуации с использованием.

10
задан Kim Gräsman 27 August 2009 в 09:15
поделиться

3 ответа

Использование WS_EX_LAYERED в атрибуте стиля Windows и вызов UpdateLayeredWindow , вероятно, является наиболее гибким способом управления настраиваемым прозрачным окном с помощью Win32 API. В MSDN есть отличная разбивка (хотя и немного старая): http://msdn.microsoft.com/en-us/library/ms997507.aspx

И официальный документ для UpdateLayeredWindow: http://msdn.microsoft.com/en-us/library/ms633556 (VS.85) .aspx

6
ответ дан 4 December 2019 в 01:57
поделиться

Используйте SetWindowRgn , чтобы сделать область рисования окна эллиптической областью. Это предотвращает отрисовку окна за пределами границы эллипса.

1
ответ дан 4 December 2019 в 01:57
поделиться

Единственная проблема с использованием SetWindowRgn заключается в том, что регионы трудно создавать совершенно произвольные формы.

Windows 2000 представила многоуровневые окна для решения этой проблемы, и именно поэтому clippy смог выйти за рамки его окно.

См. http://msdn.microsoft.com/en-us/library/ms997507.aspx для получения информации о многоуровневых окнах.

1
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

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