|
Тема |
Re: Window docking BETA test [re: WiseGuy] |
|
Автор |
naki (Power User) |
|
Публикувано | 09.11.01 00:40 |
|
|
Това ми е субкласващата функция:
LPRECT rect;
// при оразмеряване
// за мене няма проблем да се ресайзва,
// ти си си направил твоя прозорец да не може
// да се ресайзва
if(Message.Msg==WM_EXITSIZEMOVE)
{
if(dir==1)
Left=desktop.left;
else if(dir==2)
Left=desktop.right-Width;
else if(dir==3)
Top=desktop.top;
else if(dir==4)
Top=desktop.bottom-Height;
}
// тука се прави проверка дали се сменя размера или
// мястото на таскбара
if(Message.Msg==WM_SETTINGCHANGE)
{
if(Message.WParam==SPI_SETWORKAREA)
{
// тази фунция е ключът към всичко
// викам я и в началото на програмата за да имам началните
// размери на десктопа (клиентската част)
// а тук се опреснява при промяна
// като глобална променлива имам RECT desktop
SystemParametersInfo(SPI_GETWORKAREA,NULL,&desktop,NULL);
// и се лепи на новото място
if(dir==1)
Left=desktop.left;
else if(dir==2)
Left=desktop.right-Width;
else if(dir==3)
Top=desktop.top;
else if(dir==4)
Top=desktop.bottom-Height;
}
}
if (Message.Msg == WM_MOVING)
{
rect=(LPRECT)Message.LParam;
if(left->Checked)
{
rect->left=desktop.left;
rect->right=desktop.left+Width;
if(rect->top<desktop.top)
{
rect->top=desktop.top;
rect->bottom=desktop.top+Height;
}
if(rect->bottom>desktop.bottom)
{
rect->top=desktop.bottom-Height;
rect->bottom=rect->top+Height;
}
}
else if(right->Checked)
{
rect->left=desktop.right-Width;
rect->right=desktop.right;
if(rect->top<desktop.top)
{
rect->top=desktop.top;
rect->bottom=desktop.top+Height;
}
if(rect->bottom>desktop.bottom)
{
rect->top=desktop.bottom-Height;
rect->bottom=rect->top+Height;
}
}
else if(up->Checked)
{
rect->top=desktop.top;
rect->bottom=desktop.top+Height;
if(rect->left<desktop.left)
{
rect->left=desktop.left;
rect->right=desktop.left+Width;
}
if(rect->right>desktop.right)
{
rect->left=desktop.right-Width;
rect->right=desktop.right;
}
}
else if(down->Checked)
{
rect->top=desktop.bottom-Height;
rect->bottom=rect->top+Height;
if(rect->left<desktop.left)
{
rect->left=desktop.left;
rect->right=desktop.left+Width;
}
if(rect->right>desktop.right)
{
rect->left=desktop.right-Width;
rect->right=desktop.right;
}
}
}
WndProc(Message);
Модифицирай го така че да не е твърдо залепено
като в мойта програма, а да е както ти го искаш.
А ти щом искаш да е като УинАмп значи трябва
да имаш поне 2 (ДВА) прозореца, а не 1 (ЕДИН).Редактирано от naki на 09.11.01 00:47.
|
| |
|
|
|