C#窗体应用程序怎么互换两个控件坐标要求是分别点击两个控件后互换?

C#窗体应用程序怎么互换两个控件坐标要求是分别点击两个控件后互换?,第1张

准备两个变量,用来保存被点击状态,比如 Atrl_selected, Btrl_selected

点击事件(不一定是第一次第二山坦次,通用)中判断

如果Atrl_selected 无值,那么本次点击是第一次粗唯磨,做如下动作。

1。设置 Atrl_selected 值(或者名字或则坐标,供第二次调用)。

如果Atrl_selected 有值,那么本次点击是第二次,做如下动作。

1。记录A,B的坐标,

2。重新设置A,B坐标岩斗(互换)

3。清空Atrl_selected, Btrl_selected值。

写一个函春颂哗数转换一下就好了,比如说你的坐标系里扒行的一个点p(1,2),p=func(p)//p就是从你的坐标系转换成窗口的坐标系,然后进行 *** 作就是了。

POINT func(POINT p)

{

POINT p1

RECT rec

::GetWindowRect(窗口樱没句柄,&rec)

p1.x=rec.Width()/2p1.y=rec.Height()/2

p1.x+=p.xp1.y-=p.y

return p1

}

void C***::OnSetDeskIcon() 

{    

    HWND  hwndParent = ::FindWindow( "Progman", "Program Manager" ) 

    HWND  hwndSHELLDLL_DefView = ::FindWindowEx( hwndParent, NULL, "SHELLDLL_DefView", NULL ) 

    HWND  hwndSysListView32 = ::FindWindowEx( hwndSHELLDLL_DefView, NULL, "SysListView32", "FolderView" )

 

    int Nm = ListView_GetItemCount( hwndSysListView32 )

 

    int sNm = 0

    if( Nm >= 10 )

    {

        sNm = 10

    }else{

        sNm = Nm

    }

 

    for( int i = 0 i < sNm i++ )

    {

        int x = 亩哗晌400 + 150*cos( i*36*3.1415926/180 )

        int y = 400 + 150*sin( i*36*3.1415926/180 )

 

       芦世 ::SendMessage( hwndSysListView32,   LVM_SETITEMPOSITION, i,   MAKELPARAM( x,y))

    }

    ListView_RedrawItems(hwndSysListView32, 0, ListView_GetItemCount(hwndSysListView32) 迅锋- 1)

    ::UpdateWindow(hwndSysListView32)

}

桌面的图标位置是在SysListView32里保存的, 这个程序就是用来修改的.

虽然没看懂.....不过看起来很麻烦.........


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12415969.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存