2016-04-06 27 views
1

Üst koordinatının her zaman X olduğu bir pencere uygulamak istiyorum (basitlik için 0 diyelim). Anlamı, pencerenin üst tarafı, ekranın üst kısmı olan 0'a sabitlenir.Sabit üst koordinatlı yeniden boyutlandırılabilir pencere oluştur

Pencereyi zaten uygulamıştım, konumunu SetWindowPos kullanarak ayarladım ancak üst koordinat değerini koruyarak mücadele ediyorum.

+0

bu küçük pencere için mi? Eğer zaten ne yaptığını gösterirseniz, anlaşılması daha kolay olacaktır. –

+0

Sadece basit bir exe 'CreateWindowEx' kullanarak bir pencere oluşturun. yardımcı programların birçoğu pencere oluşturulmasında yer almaktadır, bu yüzden ilgili tüm kodları göndermek zor. Umarım bunu başarmak için mevcut 'HWND'yi manipüle etmenin basit bir yolunu ararım. – idanshmu

+0

Kullanıcının pencereyi hareket ettirmesini istemediğini mi söylüyorsun? (Bu, altyazıyı kaldırmayı ve özel bir yeniden boyutlandırmayı gerektirmeyi gerektirir) - veya pencereyi yeniden boyutlandıracak olan SetWindowPos (hwnd, 0, 0, 0, width, height, SWP_NOMOVE) 'ı arıyor ancak üstünü değiştirmez. sol köşe değeri. –

cevap

1

Sen Sonra yukarı ve aşağı pencere hareketli değişiklik isteklerine WM_NCHITTEST geçersiz örnek

CreateWindow(className, title, WS_THICKFRAME | WS_POPUP, ...) 

için, hiçbir başlık çubuğuna sahip bir pencere oluşturabilirsiniz.

CreateWindow(className, title, WS_OVERLAPPEDWINDOW, ...) 

Sonra yanı WM_WINDOWPOSCHANGING için geçersiz kılma ekleyin: pencere örneğin başlık çubuğu, varsa

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) 
    { 

    case WM_NCHITTEST: 
    { 
     LRESULT lresult = DefWindowProc(hwnd, msg, wParam, lParam); 
     switch (lresult) 
     { 
     case HTTOP:  lresult = HTCLIENT; break; 
     case HTTOPLEFT: lresult = HTLEFT; break; 
     case HTTOPRIGHT: lresult = HTRIGHT; break; 
     } 
     return lresult; 
    } 

    case WM_WINDOWPOSCHANGING: 
    { 
     WINDOWPOS* wndpos = (WINDOWPOS*)lParam; 
     wndpos->y = 100;//choose a fixed position 
     break; 
    } 

    ... 
    } 

    return DefWindowProc(hwnd, msg, wParam, lParam); 
} 
İlgili konular