2014-07-17 5 views
0

Что я пытаюсь сделать, так это сделать dll, который при запуске будет иметь всплывающее окно без границ. Форма будет самой высокой во все времена, и она будет непрозрачной. Я также смогу щелкнуть по форме. На данный момент все это работает, проблема, с которой я столкнулась, заключается в настройке расположения форм. Когда я пытаюсь установить расположение форм, он просто не перемещается.Как установить расположение формы

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 
namespace pic 
{ 
public class Class1 
{ 
    [DllImport("user32.dll", SetLastError = true)] 
    private static extern UInt32 GetWindowLong(IntPtr hWnd, int nIndex); 
    [DllImport("user32.dll")] 
    static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong); 
    [DllImport("user32.dll")] 
    static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags); 
    public const int GWL_EXSTYLE = -20; 
    public const int WS_EX_LAYERED = 0x80000; 
    public const int WS_EX_TRANSPARENT = 0x20; 
    public const int LWA_ALPHA = 0x2; 
    public const int LWA_COLORKEY = 0x1; 


    public void t() 
    { 

     Console.Beep(100,100); 
     Form f = new Form(); 
     f.BackColor = Color.White; 
     f.FormBorderStyle = FormBorderStyle.None; 
     f.Bounds = Screen.PrimaryScreen.Bounds; 
     f.TopMost = true; 
     Bitmap bitmap = new Bitmap("c:\\users\\mike\\documents\\visual studio 2013\\Projects\\pic\\pic\\Grapes.png"); 
     f.Size = new Size(bitmap.Size.Width, bitmap.Size.Height); 
     f.Location = new Point(500, 500); 
     Application.EnableVisualStyles(); 
     Console.Beep(500,200); 
     SetWindowLong(f.Handle, GWL_EXSTYLE, 
     (IntPtr)(GetWindowLong(f.Handle, GWL_EXSTYLE)^WS_EX_LAYERED^WS_EX_TRANSPARENT)); 
     // set transparency to 50% (128) 
     SetLayeredWindowAttributes(f.Handle, 0, 128, LWA_ALPHA); 
     f.BackgroundImage = Bitmap.FromFile("c:\\users\\mike\\documents\\visual studio 2013\\Projects\\pic\\pic\\Grapes.png"); 
     Application.Run(f); 

    } 

} 
} 
+0

, когда вы говорите, что «это немного изменилось» - что это немного подвигло в ссылке? С последнего прогона? Может ли это быть аутопозицией, что окна делают это «немного движется»? например, если вы нажмете win + e несколько раз, исследователи будут уложены со смещением, а не друг на друга. Это то, что перемещает ваше окно? – Default

+0

@Default, вы правы, он действительно не двигался. Он просто меняет положение на каждом прогоне. – hurnhu

+1

О, это было мое следующее предложение. Так что, играя с значениями «StartPosition», ничего не получается? Установка его на «Ручной» кажется, что он должен решить проблему. – Default

ответ

1

Вы должны установить формы StartPosition, а также, так как по умолчанию (вероятно) WindowsDefaultLocation. При расположении по умолчанию для Windows автоматически разместим форму

f.StartPosition = Manual; 

Это вместо того, чтобы использовать Location координаты, чтобы поместить форму.

Смежные вопросы