Изменить класс winforms для wpf

184
03 августа 2018, 16:30

Подскажите пожалуйста, как исправить код класса (приведен ниже) для приложений c# wpf vs2010. Сейчас данный класс работает в c# winforms vs2010 и позволяет выравнивать окна messangebox по центру формы.

using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class CenterWinDialog : IDisposable
{
    private int mTries = 0;
    private Form mOwner;
    public CenterWinDialog(Form owner)
    {
        mOwner = owner;
        owner.BeginInvoke(new MethodInvoker(findDialog));
    }
    private void findDialog()
    {
        // Enumerate windows to find the message box
        if (mTries < 0) return;
        EnumThreadWndProc callback = new EnumThreadWndProc(checkWindow);
        if (EnumThreadWindows(GetCurrentThreadId(), callback, IntPtr.Zero))
        {
            if (++mTries < 10) mOwner.BeginInvoke(new MethodInvoker(findDialog));
        }
    }
    private bool checkWindow(IntPtr hWnd, IntPtr lp)
    {
        // Checks if <hWnd> is a dialog
        StringBuilder sb = new StringBuilder(260);
        GetClassName(hWnd, sb, sb.Capacity);
        if (sb.ToString() != "#32770") return true;
        // Got it
        Rectangle frmRect = new Rectangle(mOwner.Location, mOwner.Size);
        RECT dlgRect;
        GetWindowRect(hWnd, out dlgRect);
        MoveWindow(hWnd,
            frmRect.Left + (frmRect.Width - dlgRect.Right + dlgRect.Left) / 2,
            frmRect.Top + (frmRect.Height - dlgRect.Bottom + dlgRect.Top) / 2,
            dlgRect.Right - dlgRect.Left,
            dlgRect.Bottom - dlgRect.Top, true);
        return false;
    }
    public void Dispose()
    {
        mTries = -1;
    }
    // P/Invoke declarations
    private delegate bool EnumThreadWndProc(IntPtr hWnd, IntPtr lp);
    [DllImport("user32.dll")]
    private static extern bool EnumThreadWindows(int tid, EnumThreadWndProc callback, IntPtr lp);
    [DllImport("kernel32.dll")]
    private static extern int GetCurrentThreadId();
    [DllImport("user32.dll")]
    private static extern int GetClassName(IntPtr hWnd, StringBuilder buffer, int buflen);
    [DllImport("user32.dll")]
    private static extern bool GetWindowRect(IntPtr hWnd, out RECT rc);
    [DllImport("user32.dll")]
    private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int w, int h, bool repaint);
    private struct RECT { public int Left; public int Top; public int Right; public int Bottom; }
}
READ ALSO
оптимизация и исправление ошибок

оптимизация и исправление ошибок

пользуюсь Xpath приходится обновлять в таймере постоянно сраницуЕсть главная форма и таймер

217
Как правильно настроить правку даты и времени в TextBox

Как правильно настроить правку даты и времени в TextBox

Есть текстовые поля, в которых заносится дата и время при запуске формы

198
Есть ли аналог preg_replace в c#?

Есть ли аналог preg_replace в c#?

Есть массив "шаблонных слов"Можно ли прочитав шаблон(pattern) с БД сделать автозамену "шаблонных слов" на нужные

205
NAudio - передача и воспроизведение mp3Frame через TCP

NAudio - передача и воспроизведение mp3Frame через TCP

Я пишу TCP сервер-клиент приложение, часть которого которое реализует воспроизведение выбранного серверомmp3 файла на всех подключённых клиентах

162