VC怎样隐藏控制台窗口
vs工程运行时隐藏窗口方法
vs工程运行时隐藏窗口方法在Visual Studio中,当我们运行一个程序时,有时候我们希望程序在后台运行,而不显示窗口。
这在一些需要静默运行的场景下非常有用,比如后台任务或者系统服务。
下面我将从多个角度来介绍在Visual Studio中实现隐藏窗口的方法。
1. 使用Windows Forms应用程序,如果你的程序是基于Windows Forms的,你可以在Main方法中设置Application.Run时传入一个隐藏的窗体,这样程序就会在后台运行而不显示窗口。
csharp.Application.Run(new HiddenForm());2. 使用Console应用程序,对于控制台应用程序,你可以在Main方法中调用Win32 API来隐藏控制台窗口。
csharp.class Program.{。
[DllImport("kernel32.dll")]static extern IntPtr GetConsoleWindow();[DllImport("user32.dll")]static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);const int SW_HIDE = 0;static void Main()。
{。
IntPtr hWnd = GetConsoleWindow();if (hWnd != IntPtr.Zero)。
{。
ShowWindow(hWnd, SW_HIDE);}。
// 其他代码。
}。
}。
3. 使用WPF应用程序,对于基于WPF的应用程序,你可以在App.xaml.cs中重写OnStartup方法,在启动时隐藏主窗口。
csharp.protected override void OnStartup(StartupEventArgs e)。
{。
base.OnStartup(e);MainWindow mainWindow = new MainWindow();mainWindow.Hide();// 其他代码。
C#隐藏窗体
C#隐藏窗体在讲截图之前,先看看怎么隐藏窗体,在winform中,隐藏窗体也许很简单,是的,直接调⽤hide()⽅法就可以隐藏呢!但是有时有这样的需求,⽐如你在窗体上布局了菜单,然后在隐藏窗体时你希望⼜可以调⽤,这时你就可以采⽤另外⼀种⽅式呢! private void Init(){SetStyle(erPaint|ControlStyles.AllPaintingInWmPaint|ControlStyles.OptimizedDoubleBuffer,true);TopMost = true;ShowInTaskbar = false;FormBorderStyle = FormBorderStyle.None;Bounds = Screen.GetBounds(this);BackgroundImage = GetDestopImage();}private Image GetDestopImage(){Rectangle rect = Screen.GetBounds(this);Bitmap bmp = new Bitmap(rect.Width,rect.Height,PixelFormat.Format32bppArgb);Graphics g = Graphics.FromImage(bmp);IntPtr gHdc = g.GetHdc();IntPtr deskHandle = NativeMethods.GetDesktopWindow();IntPtr dHdc = NativeMethods.GetDC(deskHandle);NativeMethods.BitBlt(gHdc,0,0,Width,Height,dHdc,0,0,NativeMethods.TernaryRasterOperations.SRCCOPY);NativeMethods.ReleaseDC(deskHandle,dHdc);g.ReleaseHdc(gHdc);return bmp;}关键是这段:internal class NativeMethods{public const int WS_EX_TRANSPARENT = 0x00000020;[DllImport("user32.dll")]public static extern bool ClipCursor(ref RECT lpRect);[DllImport("user32.dll")]public static extern IntPtr GetDesktopWindow();[DllImport("user32.dll")]public static extern IntPtr GetDC(IntPtr ptr);[DllImport("user32.dll")]public static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);[DllImport("gdi32.dll")]public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth,int nHeight, IntPtr hObjSource, int nXSrc, int nYSrc,TernaryRasterOperations dwRop);[DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern IntPtr LoadLibrary(string lpFileName);[StructLayout(LayoutKind.Sequential)]public struct RECT{public int Left;public int Top;public int Right;public int Bottom;public RECT(int left, int top, int right, int bottom){Left = left;Top = top;Right = right;Bottom = bottom;}public RECT(Rectangle rect){Left = rect.Left;Top = rect.Top;Right = rect.Right;Bottom = rect.Bottom;}public Rectangle Rect{get{return new Rectangle(Left,Top,Right - Left,Bottom - Top);}}public Size Size{get{return new Size(Right - Left, Bottom - Top);}}public static RECT FromXYWH(int x, int y, int width, int height){return new RECT(x,y,x + width,y + height);}public static RECT FromRectangle(Rectangle rect){return new RECT(rect.Left,rect.Top,rect.Right,rect.Bottom);}}public enum TernaryRasterOperations{SRCCOPY = 0x00CC0020, /* dest = source*/SRCPAINT = 0x00EE0086, /* dest = source OR dest*/SRCAND = 0x008800C6, /* dest = source AND dest*/SRCINVERT = 0x00660046, /* dest = source XOR dest*/SRCERASE = 0x00440328, /* dest = source AND (NOT dest )*/NOTSRCCOPY = 0x00330008, /* dest = (NOT source)*/NOTSRCERASE = 0x001100A6, /* dest = (NOT src) AND (NOT dest) */ MERGECOPY = 0x00C000CA, /* dest = (source AND pattern)*/MERGEPAINT = 0x00BB0226, /* dest = (NOT source) OR dest*/PATCOPY = 0x00F00021, /* dest = pattern*/PATPAINT = 0x00FB0A09, /* dest = DPSnoo*/PATINVERT = 0x005A0049, /* dest = pattern XOR dest*/DSTINVERT = 0x00550009, /* dest = (NOT dest)*/BLACKNESS = 0x00000042, /* dest = BLACK*/WHITENESS = 0x00FF0062, /* dest = WHITE*/}}。
C#控制台隐藏窗体
RemoveMenu(closeMenu, SC_CLOSE, 0x0);
}
public static bool IsExistsConsole(string title)
{
Console.Title = "Test2";
ConsoleWin32Helper.ShowNotifyIcon();
ConsoleWin32Helper.DisableCloseButton(Console.Title);
}
static void _NotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
Console.WriteLine("托盘被双击.");
int a = new Random().Next(5);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
using System.Drawing;
ParenthWnd = FindWindow(null, "Test2");
int normalState = 0;//窗口状态(隐藏)
ShowWindow(ParenthWnd, normalState);
}
}
return true;
隐藏命令窗口的操作方法是
隐藏命令窗口的操作方法是
在Windows操作系统中,有几种方法可以隐藏命令窗口:
1. 编写一个批处理文件并运行:创建一个批处理文件(后缀名为 .bat 或
者 .cmd),在其中执行你想要运行的命令。
然后,双击运行这个批处理文件即可隐藏命令窗口。
2. 使用VBScript 或者PowerShell 脚本:创建一个VBScript 或者PowerShell 脚本文件(后缀名为 .vbs 或者 .ps1),在其中执行你想要运行的命令。
然后,双击运行这个脚本文件即可隐藏命令窗口。
3. 创建一个快捷方式:右键点击命令窗口中的标题栏,选择“属性”。
在“快捷方式”选项卡中,将“运行”设置为“最小化”或者“隐藏”。
然后,使用这个快捷方式来运行命令。
4. 使用第三方工具:可以使用一些第三方工具来隐藏命令窗口,例如,使用AutoHotkey 脚本,使用编译器将脚本文件转换成可执行文件等。
请注意,在一些情况下,命令窗口可能会在命令执行完毕后自动关闭,而在一些情况下,命令窗口可能会一直保持打开状态。
以上方法适用于Windows操作系统,对于其他操作系统可能有不同的方法。
关于VC隐藏DOS窗体方法
在VC下要隐藏黑色的DOS窗口,方法可以添加语句#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 强制制定入口点,(VC2008)一定要放在程序开头!在VC6.0 可为#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) int main(int argc, char* argv[]){MessageBox(NULL, "测试", "提示", MB_OK);return 0;}在VC2008下,则为#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) #include "stdafx.h"#include "windows.h"#include <tChar.h>int _tmain(int argc, _TCHAR* argv[]){MessageBox(NULL,_T("你好"),_T("提示"),0);return 0;}另行几种方法/subsystem:console /entry:mainCRTStartup (ANSI版)/subsystem:console /entry:wmainCRTStartup (UNICODE版)Windows应用程序:/subsystem:windows /entry:WinMain (ANSI版)/subsystem:windows /etnry:wWinMain (UNICODE版)入口地址和子系统也可以进行不关联(非默认)设置。
怎么隐藏控制面板选项
可以利用组策略设置来隐藏控制面板中的选项,很多用户不知道该如何设置,具体的设置方法如下。
1.单击开始;运行,输入Gpedit.msc,打开组策略。
2.展开用户配置;管理模板;控制面板,在右侧找到隐藏指定的控制面板程序。
3.选中已启用,然后单击显示。
4.弹出显示内容,单击右侧的添加。
5.弹出添加项目,在输入要添加的项目下输入想要隐藏的控制面板程序。
如果想隐藏一个控制面板项目,输入该项目的文件名,比如Ncpa.cpl。
如果想隐藏文件夹,可以输入文件名。
6.设置完毕后连续单击确定,保存退出即可。
vc怎样设置控制台窗口界面
VC怎样设置控制台窗口界面一、概述所谓控制台应用程序,就是指那些需要与传统DOS操作系统保持某种程序的兼容,同时又不需要为用户提供完善界面的程序。
简单地讲,就是指在Windows环境下运行的DOS程序。
一旦C++控制台应用程序在Windows 9x/NT/2000操作系统中运行后,就会弹出一个窗口。
例如下列过程:单击Visual C++标准工具栏上的“New Text File”按钮,打开一个新的文档窗口。
选择File | Save菜单或按快捷键Ctrl+S或单击标准工具栏的Save 按钮,弹出“保存为”文件对话框。
将文件名为“Hello.cpp” (注意扩展名.cpp 不能省略)。
在文档窗口中输入下列代码:#include<iostream.h>{cout<<"Hello, Console!"<<endl;}单击小型编译工具栏中的“Build”按钮或按F7键,系统出现一个对话框,询问是否将此项目的工作文件夹设定源文件所在的文件夹,单击[是]按钮,系统开始编译。
单击小型编译工具栏中的“Execute Program”按钮或按Ctrl+F5键,运行刚才的程序。
程序运行后,弹出下图的窗口。
这就是控制台窗口,与传统的DOS屏幕窗口相比最主要的区别有:(1) 默认的控制台窗口有系统菜单和标题,它是一个内存缓冲区窗口,缓冲区大小取决于Windows操作系统的分配;而DOS屏幕是一种物理窗口,不具有Windows窗口特性,其大小取决于ROM BIOS分配的内存空间。
(2) 控制台窗口的文本操作是调用低层的Win32 APIs,而DOS屏幕的文本操作是通过调用BIOS的16(10h)中断而实现的。
(3) 默认的控制台窗口可以接收键盘和鼠标的输入信息,设备驱动由Windows管理,而DOS屏幕窗口接收鼠标时需要调用33h中断,且鼠标设备驱动程序由自己安装。
MFC隐藏和显示一个控件的方法
MFC隐藏和显示一个控件的方法在MFC中,可以通过以下几种方法隐藏和显示一个控件。
1. 使用SetWindowPos函数可以使用CWnd::SetWindowPos函数来隐藏和显示一个控件。
此函数用于移动和调整窗口或控件的大小。
要隐藏一个控件,可以将SWP_HIDEWINDOW标志传递给该函数的nFlags参数。
要显示一个控件,可以将SWP_SHOWWINDOW标志传递给nFlags参数,如下所示:```//隐藏一个控件GetDlgItem(IDC_CONTROL_ID)->ShowWindow(SW_HIDE);//显示一个控件GetDlgItem(IDC_CONTROL_ID)->ShowWindow(SW_SHOW);```2. 使用ShowWindow函数使用CWnd::ShowWindow函数也可以隐藏和显示一个控件。
该函数接受一个参数nCmdShow,指定要采取的操作,可以使用SW_HIDE常量隐藏一个控件,使用SW_SHOW常量显示一个控件,如下所示:```//隐藏一个控件GetDlgItem(IDC_CONTROL_ID)->ShowWindow(SW_HIDE);//显示一个控件GetDlgItem(IDC_CONTROL_ID)->ShowWindow(SW_SHOW);```3. 使用ModifyStyle函数可以使用CWnd::ModifyStyle函数来修改控件的样式。
通过修改控件的样式,可以隐藏或显示控件。
要隐藏一个控件,可以从控件样式中移除WS_VISIBLE样式;要显示一个控件,可以将该样式添加回控件中,如下所示:```//隐藏一个控件GetDlgItem(IDC_CONTROL_ID)->ModifyStyle(WS_VISIBLE, 0);//显示一个控件GetDlgItem(IDC_CONTROL_ID)->ModifyStyle(0, WS_VISIBLE);```注意:上述示例代码中的IDC_CONTROL_ID应替换为要隐藏或显示的控件的ID。
VC对话框隐藏运行(四)悬浮窗
VC对话框隐藏运⾏(四)悬浮窗VC对话框隐藏运⾏ (四)悬浮窗发表时间:2010-7-10 阅读数:544 ⽹友评论:0条Windows的菜单⼀层⼀层的,有时操作起来不⽅便,就想⾃⼰写个⼯具直接调⽤。
对迅雷的悬浮窗垂涎好久了,哈,正好趁这个机会搞⼀搞。
在悬浮窗上⽤快捷菜单不是很⽅便吗?在VC知识库中找到了⼀篇介绍悬浮窗实现的例⼦,很好,拿来就⽤,⼜做了些增强功能,呵呵,特此Show⼀下。
知识库⽂章地址:点这⾥。
要实现悬浮窗,就得弄明⽩悬浮窗是什么,有什么⾏为和作⽤。
悬浮窗其实是⼀个⽆边框可以拖动的窗⼝,再有就是它上⾯铺满⼀张图,当然也可以是空⽩,可以设置透明度,双击可实现主窗⼝的显⽰和隐藏,右键有菜单,可以实现快捷操作;还有⼀点就是它在任务栏中不显⽰。
好了,明⽩了原理就开始找资料动⼿了。
我的习惯是先攻克所有的技术点,然后再动⼿写程序。
在资源⽂件中插⼊⼀个Dialog,给它添加⼀个类CFloatWnd。
⾸先是⽆边框,这个容易,将窗⼝的Border设为None就可以了。
⽆边框窗⼝的拖动也很容易,重写OnNcHitTest就可以了。
原理就是当⽤户点击了窗⼝客户区后,把它当成标题栏来传给操作系统,这样就实现了拖动。
代码如下:1. LRESULT CFloatWnd::OnNcHitTest(CPoint point)2. {3. // TODO: 在此添加消息处理程序代码和/或调⽤默认值4. LRESULT nHitTest = CDialog::OnNcHitTest(point);5.6. if (nHitTest == HTCLIENT && GetAsyncKeyState(MK_LBUTTON) < 0 ) //如果是客户区//如果⿏标左键按下,GetAsyncKeyState函数的返回值⼩于07. nHitTest = HTCAPTION; //则把它当成标题栏8.9. return nHitTest;10. //return CDialog::OnNcHitTest(point);11. }不要认为GetAsyncKeyState没有⽤,这样做的⽬的是点击左键拖动,⽽点击右键则不能拖动且要弹出右键菜单。
VC怎样隐藏控制台窗口
自己的总结:平台:Windows Sever2003环境:Visual Studio 2008在项目属性中如下两步操作:【链接器】——【系统】——【子系统】:/SUBSYSTEM:WINDOWS 【链接器】——【高级】——【入口点】:mainCRTStartupVC++ 隐藏控制台程序窗口大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似dos窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的/subsystem 选项该选项的语法形式如下:/subsystem:{console|efi_application|efi_boot_service_driver|efi_rom|efi_runtime_driver|native|posix|windows|windowsce}[,major[.minor]]这个链接选项告诉操作系统如何运行可执行文件console:win32 字符模式应用程序,此种类型的应用程序在运行的时候会产生一个类似dos窗口的控制台窗口,如果在应用程序的主函数为main()或者wmain(),在默认情况下该应用程序就是一个控制台应用程序extensible firmware interface和cpu具体架构相关的一个参数选项,并不常用,在这里暂不详细介绍.如果对此有兴趣的可以访问intel主页来查看相关内容native;设备驱动器选项,如果/driver:wdm选项被设定的话,该链接选项(native)就为默认选项posix:在windows nt 种运行在posix子系统上的应用程序windows:该类型的应用程序不产生console窗口,该类型的应用程序的窗口由用户自己创建,简而言之就是一个标准的win32 application,其入口地址为winmain()函数或者wwinmain()函数的地址如果你在应用程序种定义的主函数为winmain或者wwinmain,在默认情况下该应用程序就是一个win32 application !windowsce:运行在windows ce上的应用程序major and minor (optional):主版本号和次版本号,该选项为可选,该选项为0~65535之间的十进制整数从上面可以看出如果我们建立一个win32 console application的话,linker的/subsystem选项应该为console,可以在vc开发环境的project->setting->link->project option中看到!接下来我们再看看应用程序是如何运行的!我们知道用vc编写的程序,运行的时候是需要cc 运行库支持的.当我们运行一个c/c 程序的时候链接器会首先寻找应用程序的启动函数,例如:如果你建立了一个console程序的话,编译器得链接开关会是以下这种形式/subsystem:console /entry:maincrtstartup (ansi)/subsystem:console /entry:wmaincrtstartuup (unicode)如果你建立了一个win32 application,编译器得链接开关则会是一下形式/subsystem:windows /entry:winmain (ansi)/sbusystem:windows /entry:wwinmain (uincode)上面的两种形式可以再project->setting->link->project option中看到上面的subsystem和entry并不需要都设置,如果你只设置了/subsystem:console的话,那么默认的entry开关在默认情况下应为/entry:maincrtstartup反之,如果你在应用程序中定义了main函数的话,默认情况下,你的/subsystem开关应该为/system:console在默认情况下/subsystem 和/entry开关是匹配的,也就是console对应maincrtstartup或者wmaincrtstartupwindows对应winmain或者wwinmain但是我们也可以通过手动改动的方式使他们不匹配例如我们可以这样改动#pragma comment( linker, /subsystem:windows /entry:maincrtstartup ) // 设置入口地址int main(int argc, char* argv[]){messagebox(null, hello, notice, mb_ok);return 0;}在默认情况下链接器看到/subsystem下是windows选项的时候,它会自动寻找winmain 或者wwinmain但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!上面是在代码中使用#pragma指令来设置,还有一种就是直接在开发环境的project->setting->link->project option中手工改动!写了这么多,自己都有点感觉乱,没有办法,以前没写过什么文章,所以措辞可能不太好,希望大家见谅。
VC使对话框程序启动时隐藏窗口
VC使对话框程序启动时隐藏窗口想让对话框程序隐藏启动,然后需要时又可以显示。
刚开始我也想到在OnInitDialog()中加上ShowWindow(SW_HIDE),其实这样是不行的,不信自己去试验找了网上的方法,都没有满足我的要求,自己总结了一个比较满意的方法。
定义一个bool b_show;//决定是否隐藏b_show=false;//默认隐藏可以在对话框中重载虚函数DefWindowProc()。
LRESULT CTest2Dlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam){if(message==133 ){if(b_show==false)ShowWindow(SW_HIDE);elseShowWindow(SW_SHOW);}return CDialog::DefWindowProc(message, wParam, lParam);}程序中想还原显示的时候可以b_show=true;this->ShowWindow(SW_SHOW);//-------------------------------------网上的相关资料-----------------------------------------------------------------------// 对于这类问题,大家最容易想到的可能就是在PreCreateWindow中添加cs.style &=~WS_VISIBLE;这是不可行的。
程序仍可使用ShowWindow()将窗体显示出来.1.基于对话框的程序我在论坛上看到有人说在OnInitDialog()中加上ShowWindow(SW_HIDE)对话框便不出现了,其实是不可行的。
至于原因,我认为是系统是在OnInitDialog()后调用ShowWindow(SW_SHOW)让对话框显示的.可以添加下面代码: CXXDlg::OnInitDialog(){...Sleep(5000);return TRUE;}可以发现5秒后对话框才显示出来.至于在何时调用的我也不清楚,但是我们可以在OnPaint()中加上ShowWindow(SW_HIDE),来达到隐藏的目的.不过使用的这种方法,会有一点闪烁.另外一种方法就是在OnInitDialog()中使用SetWindowPlacement()GetWindowPlacement(&m_wp); //恢复时用ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW );//从任务栏中去掉.WINDOWPLACEMENT wp;wp.length=sizeof(WINDOWPLACEMENT);wp.flags=WPF_RESTORETOMAXIMIZED;wp.showCmd=SW_HIDE;SetWindowPlacement(&wp);还有一种更简单的方法:在OnInitDialog()中调用下面代码.SetWindowPos(&wndTop,0,0,0,0,NULL);2.基于单文档的程序我们一般采用的方法就是将InitInstance()中的:CXXApp::InitInstance(){//m_pMainWnd->ShowWindow(SW_SHOW);}但是这样窗体还会有闪烁。
c#控制台程序隐藏控制台窗口
c#控 制 台 程 序 隐 藏 控 制 台 窗 口
在某些项目中,需要采用控制台程序,但是又不需要通过dos窗口进行交互,同时打算隐藏掉难看的控制台窗口。实现的方法很多,有的是 修改链接命令。我采用的方法略有些麻烦,首先是给窗口命名,之后找到该窗口指针,之后再调用winAPI隐藏窗口。
7
8
static void Main(string[] args)
9
{
10
Console.Title = "WAHAHA";
11
IntPtr intptr = FindWindow("ConsoleWindowClass", "WAHAHA");
12
if (intptr != IntPtr.Zero)
13
{
14
ShowWindow(intptr, 0);//隐藏这个窗口
15
}
16
string x;
17
x = Console.ReadLine();
18
}
19 }
ቤተ መጻሕፍቲ ባይዱ
5
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
6
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
1 class Program
2{
3
[DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)]
如何实现c#--winform窗体自动隐藏
让窗体拖到屏幕边缘自动隐藏的原理,通过Form1_LocationChanged的方法,当窗体位置发生改变时,判断其是否在屏幕边缘,在则隐藏。
再通过Timer控件经过指定时间判断出鼠标的位置,若鼠标在屏幕左边、上边或右边,这根据窗体的位置,调出窗体。
以下给出源代码: (注:hide为窗体名称)view plaincopy to clipboardprint?1. private void hide_Load(object sender, EventArgs e)2. {3. System.Windows.Forms.Timer StopRectTimer = new System.Windows.Forms.Timer();4. StopRectTimer.Tick += new EventHandler(timer1_Tick);5. StopRectTimer.Interval = 100;6. StopRectTimer.Enabled = true;7. }8. private void timer1_Tick(object sender, EventArgs e)9. {10. if (this.Bounds.Contains(Cursor.Position))11. {12. switch (this.StopAanhor)13. {14. case AnchorStyles.Top:15. this.Location = new Point(this.Location.X, 0);16. break;17. case AnchorStyles.Left:18. this.Location = new Point(0, this.Location.Y);19. break;20. case AnchorStyles.Right:21. this.Location = new Point(Screen.PrimaryScreen.Bounds.Width - this.Width, this.Lo cation.Y);22. break;23. }24. }25. else26. {27. switch (this.StopAanhor)28. {29. case AnchorStyles.Top:30. this.Location = new Point(this.Location.X, (this.Height - 2) * (-1));31. break;32. case AnchorStyles.Left:33. this.Location = new Point((-1) * (this.Width - 2), this.Location.Y);34. break;35. case AnchorStyles.Right:36. this.Location = new Point(Screen.PrimaryScreen.Bounds.Width - 2, this.Location.Y) ;37. break;38. }39. }40. }41. internal AnchorStyles StopAanhor = AnchorStyles.None;42. private void mStopAnhor()43. {44. if (this.Top <= 0)45. {46. StopAanhor = AnchorStyles.Top;47. }48. else if (this.Left <= 0)49. {50. StopAanhor = AnchorStyles.Left;51. }52. else if (this.Left >= Screen.PrimaryScreen.Bounds.Width - this.Width)53. {54. StopAanhor = AnchorStyles.Right;55. }56. else57. {58. StopAanhor = AnchorStyles.None;59. }60. }61. private void hide_LocationChanged(object sender, EventArgs e)62. {63. this.mStopAnhor();64. }靠边隐藏效果:当程序移动到显示的边界时,程序自动隐藏起来,留一条小边在外面,很酷的效果吧.先介绍下实现原理,靠边隐藏无非就是判断窗体的位置和屏幕的四边的关系,当上左右三个方向超出的时候,就把窗体自动往上移,问题是...怎么判断窗体的位置呢?.Net里面有很方便的事件:LocationChanged,来判断窗体位置的变化,那又如何判断鼠标和窗体的关系呢?最简单的办法是用个timer不停的去判断...,我最不想用这种方法实现,结果苦苦探寻了两个小时最终还是以这种最笨的方法来实现效果-_-#,如果不用timer,还有其他什么方法呢?我第一想到的是钩子,于是我拦截系统消息WM_MOVE,WM_MOVING,0x00a0................发现都无法满足要求,翻遍winnt.h也没发现有什么是进入窗体离开窗体时发出的消息,只有一个0x00a0是经过窗体边框时发的消息,不过呢如果鼠标移动太快,系统就收不到这个消息.... 此路不通,于是想看看.Net里面封装了什么事件, 很遗憾MouveEnter和MouseLeave会被上层的控件遮蔽,我总不能窗体上有多少控件都给设置Mouse事件吧.............,最后还是用timer来实现比较现实-_-#我把它封装成一个.Net组件,这样以后的项目如果需要这种效果只需像引用Timer一样拖拽到窗体上,然后设置DockForm为需要效果的窗体就可以了具体代码如下:using System;using ponentModel;using System.Diagnostics;using System.Text;using System.Windows.Forms;using System.Drawing;namespace ponents{[Description("窗体自动靠边隐藏组件 @Author: Red_angelX")] public partial class AutoDockManage : Component{private Form _form;public AutoDockManage(){InitializeComponent();}public AutoDockManage(IContainer container){container.Add(this);InitializeComponent();}[Description("用于控制要自动Dock的窗体")]public Form DockForm{get{return _form;}set{_form = value;if (_form != null){_form.LocationChanged += new EventHandler(_form_LocationC hanged);_form.SizeChanged += new EventHandler(_form_SizeChanged); _form.TopMost = true;}}}private bool IsOrg = false;private Rectangle lastBoard;private const int DOCKING = 0;private const int PRE_DOCKING = 1;private const int OFF = 2;private int status = 2;private void CheckPosTimer_Tick(object sender, EventArgs e){if (DesignMode){return;}if (_form == null || IsOrg == false ){return;}if (_form.Bounds.Contains(Cursor.Position)){/** 该死的.Net在移动时候不会发生该代码,必须在鼠标离开后才会执行if (dockSide == AnchorStyles.None && status == OFF && IsOrg = = true){if (_form.Bounds.Width == lastBoard.Width && _form.Bounds.H eight == lastBoard.Height){return;}_form.Size = new Size(lastBoard.Width, lastBoard.Height);return;}*/switch (dockSide){case AnchorStyles.Top:if (status == DOCKING)_form.Location = new Point(_form.Location.X, 0);break;case AnchorStyles.Right:if (status == DOCKING)_form.Location = new Point(Screen.PrimaryScreen.Bounds.W idth - _form.Width, 1);break;case AnchorStyles.Left:if (status == DOCKING)_form.Location = new Point(0, 1);break;}}else{switch (dockSide){case AnchorStyles.Top:_form.Location = new Point(_form.Location.X, (_form.Height - 4) * (-1));break;case AnchorStyles.Right:_form.Size = new Size(_form.Width, Screen.PrimaryScreen. WorkingArea.Height);_form.Location = new Point(Screen.PrimaryScreen.Bounds.W idth - 4, 1);break;case AnchorStyles.Left:_form.Size = new Size(_form.Width, Screen.PrimaryScreen. WorkingArea.Height);_form.Location = new Point((-1) * (_form.Width - 4), 1);break;case AnchorStyles.None:if (IsOrg == true && status == OFF){if (_form.Bounds.Width != lastBoard.Width || _form.Boun ds.Height != lastBoard.Height){_form.Size = new Size(lastBoard.Width, lastBoard.Heig ht);}}break;}}}internal AnchorStyles dockSide = AnchorStyles.None;private void GetDockSide(){if (_form.Top <= 0){dockSide = AnchorStyles.Top;if (_form.Bounds.Contains(Cursor.Position))status = PRE_DOCKING;elsestatus = DOCKING;}else if (_form.Left <= 0){dockSide = AnchorStyles.Left;if (_form.Bounds.Contains(Cursor.Position))status = PRE_DOCKING;elsestatus = DOCKING;}else if (_form.Left >= Screen.PrimaryScreen.Bounds.Width - _form. Width){dockSide = AnchorStyles.Right;if (_form.Bounds.Contains(Cursor.Position))status = PRE_DOCKING;elsestatus = DOCKING;}else{dockSide = AnchorStyles.None;status = OFF;}}private void _form_LocationChanged(object sender, EventArgs e){GetDockSide();if (IsOrg == false){lastBoard = _form.Bounds;IsOrg = true;}}private void _form_SizeChanged(object sender, EventArgs e) {if (IsOrg == true && status == OFF){lastBoard = _form.Bounds;}}}}。
VC防止窗口和控件闪烁的方法
VC防止窗口和控件闪烁的方法VC防止窗口和控件闪烁的方法2006-11-15 05:00作者:整理出处:互联网责任编辑:方舟争议上述方法确实有效,但在有很多控件的情况下,计算一个窗口中需要擦除并重绘的“空白区域”是一件很麻烦的事情。
为了方便这种方法的实际应用,我写了一组宏来完成”计算空白区域“的功能:说明:1)宏ERASE_BKGND_BEGIN 和ERASE_BKGND_END(pDC, clBrushColor) 搭配使用。
2)宏ADD_NOERASE_CONTROL(IDC) 和ADD_NOERASE_RECT(noEraseRect) 根据需要放在上面两个宏的中间,用来添加不需要重绘背景的区域(正是这些区域导致了闪烁),使用次数不限。
其中参数noEraseRect是一个屏幕坐标系的RECT类型或CRect类型。
使用举例1:在当前窗体的类中重写WM_ERASEBKGND消息处理函数如下:上面的IDC_BUTTON2,IDC_BUTTON1,IDC_LIST_STAT即窗体上的控件。
你可以指定其他已存在的控件。
这样,窗口在擦除背景时,将只对上述控件以后的”空白区域“使用系统色重绘,有效避免了闪烁。
备注:重载WM_ERASEBKGND消息处理函数OnEraseBkgnd的方法,选择View->ClassWizard->classinfo选项卡:message filter下拉框:选择window,然后再选择message maps选项卡,在messages下拉框应该可以找到wm_erasebkgnd.双击添加.使用举例2:防止CListCtrl在拉动窗口时闪烁。
说明:CListCtrl在拉动的时候,会前以背景色重刷背景,再在上面绘制有数据的Items,而没有数据的区域则保持背景色。
因此,如果在BOOL CExListCtrl::OnEraseBkgnd(CDC* pDC) 函数中简单的return false,那么没有数据的区域将显示不正常。
VSCode底部状态栏怎么隐藏?VSCode隐藏状态栏的技巧
VSCode底部状态栏怎么隐藏?VSCode隐藏状态栏的技巧Visual Studio Code软件底部状态栏默认是显⽰的,但是可以⾃⼰设置隐藏,该怎么设置呢?下⾯我们就来看看详细的教程。
Visual Studio Code(代码编辑器) v1.62.3 64位中⽂免费绿⾊版
类型:编译⼯具
⼤⼩:106MB
语⾔:简体中⽂
时间:2021-11-24
查看详情
⼀、英⽂界⾯的设置⽅法
打开⼀个Visual Studio Code的界⾯中
然后点击左下⾓中的设置图标
弹出了下拉菜单选中为settings选项
点击左侧中的zen mode选项
勾选上hide status bar选项
勾选上hide status bar选项之后,会对当前设置做保存了
⼆、中⽂界⾯的设置⽅法
进⼊Visual Studio Code后,点击左上⾓“⽂件”。
进⼊⽂件后,点击“⾸选项”。
进⼊⾸选项后,点击“设置”项。
进⼊设置后,点击“⼯作台-外观”。
在Side Bar:Visible项,关闭选项,即可隐藏。
以上就是VSCode设置隐藏状态栏的技巧,希望⼤家喜欢,请继续关注。
VC中如何隐藏自己的对话框
VC中如何隐藏自己的对话框
张建
【期刊名称】《电脑知识与技术》
【年(卷),期】2003()16
【总页数】1页(P39-39)
【关键词】VC语言;程序设计;对话框;应用程序;属性列表
【作者】张建
【作者单位】
【正文语种】中文
【中图分类】TP311.1
【相关文献】
1.标题动画在VFP表单和VC++对话框中的设计 [J], 李宇泊;孙晓芳
2.VC++中模态对话框和非模态对话框的编程 [J], 李琳
3.基于VC++的对话框编程中UpdateData函数的应用 [J], 陈致远;骆刚
4.VC中如何隐藏自已的对话框 [J],
5.VC中的模态对话框和非模态对话框 [J], 孟金红
因版权原因,仅展示原文概要,查看原文内容请购买。
VC编程实现显示和隐藏工具条
VC编程实现显示和隐藏工具条
梦凡
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2004(000)005
【摘要】本文通过分析了MFC工具条类与控制条类和窗口类的继承关系,来实现工具条动态显示和隐藏.
【总页数】4页(P43-45,48)
【作者】梦凡
【作者单位】无
【正文语种】中文
【中图分类】TP312
【相关文献】
1.VC下在工具条按钮中显示文字 [J], 王建
2.VC编程实现多功能工具条的技巧和方法 [J], 王鹏程
3.基于Flash页面显示的VC++编程实现 [J], 宋克章;王月茹;王仁新
4.在Windows/VC++环境下编程实现FITS图像的显示 [J], 彭青松;李有兵
5.VC++与Matlab混合编程实现光场光强的三维显示 [J], 杨入超
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自己的总结:平台:Windows Sever2003环境:Visual Studio 2008在项目属性中如下两步操作:【链接器】——【系统】——【子系统】:/SUBSYSTEM:WINDOWS 【链接器】——【高级】——【入口点】:mainCRTStartupVC++ 隐藏控制台程序窗口大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似dos窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的/subsystem 选项该选项的语法形式如下:/subsystem:{console|efi_application|efi_boot_service_driver|efi_rom|efi_runtime_driver|native|posix|windows|windowsce}[,major[.minor]]这个链接选项告诉操作系统如何运行可执行文件console:win32 字符模式应用程序,此种类型的应用程序在运行的时候会产生一个类似dos窗口的控制台窗口,如果在应用程序的主函数为main()或者wmain(),在默认情况下该应用程序就是一个控制台应用程序extensible firmware interface和cpu具体架构相关的一个参数选项,并不常用,在这里暂不详细介绍.如果对此有兴趣的可以访问intel主页来查看相关内容native;设备驱动器选项,如果/driver:wdm选项被设定的话,该链接选项(native)就为默认选项posix:在windows nt 种运行在posix子系统上的应用程序windows:该类型的应用程序不产生console窗口,该类型的应用程序的窗口由用户自己创建,简而言之就是一个标准的win32 application,其入口地址为winmain()函数或者wwinmain()函数的地址如果你在应用程序种定义的主函数为winmain或者wwinmain,在默认情况下该应用程序就是一个win32 application !windowsce:运行在windows ce上的应用程序major and minor (optional):主版本号和次版本号,该选项为可选,该选项为0~65535之间的十进制整数从上面可以看出如果我们建立一个win32 console application的话,linker的/subsystem选项应该为console,可以在vc开发环境的project->setting->link->project option中看到!接下来我们再看看应用程序是如何运行的!我们知道用vc编写的程序,运行的时候是需要cc 运行库支持的.当我们运行一个c/c 程序的时候链接器会首先寻找应用程序的启动函数,例如:如果你建立了一个console程序的话,编译器得链接开关会是以下这种形式/subsystem:console /entry:maincrtstartup (ansi)/subsystem:console /entry:wmaincrtstartuup (unicode)如果你建立了一个win32 application,编译器得链接开关则会是一下形式/subsystem:windows /entry:winmain (ansi)/sbusystem:windows /entry:wwinmain (uincode)上面的两种形式可以再project->setting->link->project option中看到上面的subsystem和entry并不需要都设置,如果你只设置了/subsystem:console的话,那么默认的entry开关在默认情况下应为/entry:maincrtstartup反之,如果你在应用程序中定义了main函数的话,默认情况下,你的/subsystem开关应该为/system:console在默认情况下/subsystem 和/entry开关是匹配的,也就是console对应maincrtstartup或者wmaincrtstartupwindows对应winmain或者wwinmain但是我们也可以通过手动改动的方式使他们不匹配例如我们可以这样改动#pragma comment( linker, /subsystem:windows /entry:maincrtstartup ) // 设置入口地址int main(int argc, char* argv[]){messagebox(null, hello, notice, mb_ok);return 0;}在默认情况下链接器看到/subsystem下是windows选项的时候,它会自动寻找winmain 或者wwinmain但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!上面是在代码中使用#pragma指令来设置,还有一种就是直接在开发环境的project->setting->link->project option中手工改动!写了这么多,自己都有点感觉乱,没有办法,以前没写过什么文章,所以措辞可能不太好,希望大家见谅。
1:如果console程序已经写好了,不能改了,也可以。
写一个API程序,不要画窗口,然后用CreateProcess调用写好的console程序,把属性设成SW_HIDE即可。
2:不能用控制台来写(CONSLOE),要用WINMAIN做入口就可以了,不画窗口,别人就都看不见了. 你只用想想办法把你的进程在任务栏里面隐藏住就可以.3:如果是console程序,用API函数GetStdHandle()获得控制台程序的窗口句柄,然后在隐藏窗口4://这一句隐藏控制台#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )你要写控制台程序就用这个在控制台程序中隐藏控制台窗口!转自:/html_free/25.html#如下设置#pragma comment( linker, "/subsystem:/ "windows/ " /entry:/ "mainCRTStartup/ " " ) // 设置入口地址这样就ok了大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的/subsystem 选项该选项的语法形式如下:/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}[,major[.minor]]这个链接选项告诉操作系统如何运行可执行文件CONSOLE:win32 字符模式应用程序,此种类型的应用程序在运行的时候会产生一个类似DOS窗口的控制台窗口,如果在应用程序的主函数为main()或者wmain(),在默认情况下该应用程序就是一个控制台应用程序Extensible Firmware Interface和CPU具体架构相关的一个参数选项,并不常用,在这里暂不详细介绍.如果对此有兴趣的可以访问intel主页来查看相关内容NATIVE;设备驱动器选项,如果/DRIVER:WDM选项被设定的话,该链接选项(NATIVE)就为默认选项POSIX:在windows NT 种运行在POSIX子系统上的应用程序WINDOWS:该类型的应用程序不产生console窗口,该类型的应用程序的窗口由用户自己创建,简而言之就是一个标准的Win32 application,其入口地址为WinMain()函数或者wWinMain()函数的地址如果你在应用程序种定义的主函数为WinMain或者wWinMain,在默认情况下该应用程序就是一个Win32 Application !WINDOWSCE:运行在windows CE上的应用程序major and minor (optional):主版本号和次版本号,该选项为可选,该选项为0~65535之间的十进制整数从上面可以看出如果我们建立一个win32 console application的话,linker的/subsystem选项应该为CONSOLE,可以在VC开发环境的project-> setting-> link-> project option中看到!接下来我们再看看应用程序是如何运行的!我们知道用VC编写的程序,运行的时候是需要C/C++运行库支持的.当我们运行一个C/C++程序的时候链接器会首先寻找应用程序的启动函数,例如:如果你建立了一个console程序的话,编译器得链接开关会是以下这种形式/subsystem: "console " /entry: "mainCRTStartup " (ANSI)/subsystem: "console " /entry: "wmainCRTStartuup " (UNICODE)如果你建立了一个win32 application,编译器得链接开关则会是一下形式/subsystem: "windows " /entry: "WinMain " (ANSI)/sbusystem: "windows " /entry: "wWinMain " (UINCODE)上面的两种形式可以再project-> setting-> link-> project option中看到上面的subsystem和entry并不需要都设置,如果你只设置了/subsystem: "console "的话,那么默认的entry开关在默认情况下应为/entry: "mainCRTStartup "反之,如果你在应用程序中定义了main函数的话,默认情况下,你的/subsystem开关应该为/system: "console "在默认情况下/subsystem 和/entry开关是匹配的,也就是console对应mainCRTStartup或者wmainCRTStartupwindows对应WinMain或者wWinMain但是我们也可以通过手动改动的方式使他们不匹配例如我们可以这样改动#pragma comment( linker, "/subsystem:/ "windows/ " /entry:/ "mainCRTStartup/ " " ) // 设置入口地址int main(int argc, char* argv[]){MessageBox(NULL, "hello ", "Notice ", MB_OK);return 0;}在默认情况下链接器看到/subsystem下是windows选项的时候,它会自动寻找WinMain或者wWinMain但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!上面是在代码中使用#pragma指令来设置,还有一种就是直接在开发环境的project-> setting-> link-> project option中手工改动!转自:/amy_1007/article/details/5844398。