日期:2014-05-18  浏览次数:20718 次

C#参数传递的问题
先把代码贴出了,好说事。
C# code

            if (m.Msg == WM_NCLBUTTONDOWN)
            {
                int  isDragFullWindow;

                // 1,查询当前系统“拖动显示窗口内容”设置
                SystemParametersInfo(SPI_GETDRAGFULLWINDOWS,0, out isDragFullWindow,0);

                // 2,如果需要修改设置,则在每次进入WM_NCLBUTTONDOWN默认处理之前修改
                if ( isDragFullWindow == 1)
                {
                    SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 0, 0, 0);                  
                }

                // 3,to do something
                base.WndProc(ref m);

                // 4,处理完毕后,还原系统设置
                if (isDragFullWindow == 1)
                {
                    SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 0,  1, 0);
                }      
                
            }



SystemParametersInfo 函数的定义:

C# code

        [DllImport("user32.dll",CharSet = CharSet.Auto)]
        public static extern int SystemParametersInfo(int uAction, int uParam,out  int lpvParam, intfuWinIni);



其实上面的代码有个小问题:

  我看过SystemParametersInfo这个函数在C++中既可以用来接受参数,类似C#中 out 的用法 ,如函数的第一次的使用,也可以用来直接提供参数,如函数的第二、三次的使用。但是这种在C#中是通不过的,请问这种情况该如何解决。

------解决方案--------------------
你可以再定义一个没有out的重载