vb.net如何打开一个新窗体后关闭上一个窗体1、如果上一个窗体是程序的主窗体(默认是程序的第一个窗体),
则不能关闭这个窗体,只能隐藏(Me.Hide())这个窗体,否则整
个程序就被关掉了 。
2、如果上一个窗体不是程序的主窗体,可以用Me.Close()
关闭 。
在vb.net中窗口关闭后打开的是代码,怎么回到窗口?用鼠标移动到右上方的 “解决方案资源管理器”的“视图设计器”图标(见下图),可以看到系统会显示“视图设计器”文字,单击就可能出现窗体:
如果用鼠标单击该图标左边的“查看代码”按钮,就进入代码窗口;
VB.NET命令窗口Vb不是人机对话窗口 , 而是编程工具,可以编写代码进行调试执行或者生成可执行文件 。
用Visual Studio .Net开发"Hello World!"程序:
我们知道"Hello World"一般是命令行程序,而这种程序在Visual Studio .Net中被称为"控制台程序" 。下面是Visual Studio .Net编写控制台"Hello World!"程序的具体步骤:
(1)、启动Visual Studio .Net 。
(2)、选择菜单【文件】|【新建】|【项目】后 , 弹出【新建项目】对话框 。
(3)、将【项目类型】设置为【Visual Basic项目】 。
(4)、将【模板】设置为【控制台应用程序】 。
(5)、在【名称】文本框中输入【Hello World】 。
(6)、在【位置】的文本框中输入【E:VS.NET项目】 , 然后单击【确定】按钮,则Visual Studio .Net会按照上面设定的参数创建一个控制台应用程序项目,具体如图01所示 。
图01:"Hello World"控制台程序的【新建项目】界面
(7)、在【解决方案资源管理器】窗口中,双击Module1.vb文件,进入Module1.vb文件的编辑界面 。
(8)、Visual Studio .Net已经为产生Main()函数 。在系统创建的Main()函数中加入下面一行代码就可以了:
Console.WriteLine ("Hello World!")
(9)、选择【文件】|【保存Module1.vb】菜单或者按快捷键Ctrl+S,保存所做的修改 。
(10)、此时单击快捷键Ctrl+F5运行程序就可以得到图02所示运行界面:
VB.net做的程序在进程结束后托盘图标不会消失,需要鼠标滑过才会消失 , 怎么处理这个问题?只有windows 7等以上版本的操作系统才可以自动消失 。其他windows NT内核版本vb.net退出屏保 , 例如vb.net退出屏保:windows 2003,windows xp,windows 2000等老版本vb.net退出屏保,要让图标托盘消失,必须至少要两种方法:
1:退出程序时,在代码里调用删除托盘图标的代码 。
2:程序崩溃时或者是手动结束进程后,图标遗留在右下角,只能用鼠标移动到上面,它才会消失 。
所以,必须要在代码里面写上退出托盘的程序,因为很多人当然也包括vb.net退出屏保我自己,有时候编写代码,只编写vb.net退出屏保了启动托盘的代码,没有写退出托盘的代码 , 以为程序退出了,托盘图标会自己消失 。而事实上不是这样的,托盘的启动和退出,必须要自己来显式的在程序里面实现 。启动托盘实现后 , 必须要实现退出托盘 。
所以建议大家在编写托盘图标程序时,在退出程序的时候 , 显式的调用删除托盘图标的代码就可以了 。
用VB制做可换图片的屏幕保护程序VC++可谓神通广大,如果学到家了,或者就掌握了那么一点MFC,你也会感到它的方便快捷,当然最重要的是功能强大 。不是吗 , 从最基本的应用程序.EXE到动态连接库DLL,再由风靡网上的ActiveX控件到Internet Server API,当然,还有数据库应用程序……瞧,我都用它来做屏幕保护程序了 。一般的屏幕保护程序都是以SCR作为扩展名,并且要放在c:\windows 目录或 c:\windows\system 目录下 , 由Windows 98内部程序调用(Windows NT 是在 c:\windows\system32 目录下) 。怎么调用?不用说了,这谁不知道 。
好了,我们来作一个简单的 。选择MFC AppWizard(exe),Project Name 为MyScreensaver,[NEXT],对话框,再后面随你了 。打开菜单Project、Settings,在Debug页、Executable for debug session项,以及Link页中Output file name项改为c:\windows\MyScreensaver.scr,这样,你可以调试完后,直接在VC中运行(Ctrl+F5),便可看到结果 。当然,这样做的唯一缺点是你必须手动清除Windows 目录下的垃圾文件(当然是在看到满意结果后;还有 , 你可借助SafeClean 这个小东东来帮你清除,除非你的硬盘大的让你感到无所谓……快快快回来,看我跑到那里去了) 。接下来用Class Wizard生成CMyWnd类 , 其基类为CWnd(在Base Class 中为generic CWnd) 。这个类是我们所要重点研究的 。创建满屏窗口、计时器 , 隐藏鼠标 , 展示图片,响应键盘、鼠标等等,这家伙全包了 。至于MyScreensaverDlg.h与MyScreensaverDlg.cpp文件我们暂时不管 。打开MyScreensaver.cpp,修改InitInstance()函数:
BOOL CMyScreensaverApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CMyWnd* pWnd = new CMyWnd;
pWnd-Create();
m_pMainWnd = pWnd;
return TRUE;
}
当然 , 再这之前得先 #include “MyWnd.h"。后面要做的都在MyWnd.h 与 MyWnd.cpp 两文件中了 。
下面给出CMyWnd 的说明:
class CMyWnd : public CWnd
{
public:
CMyWnd();
static LPCSTR lpszClassName; //注册类名
public:
BOOL Create();
public:
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyWnd)
protected:
virtual void PostNcDestroy();
//}}AFX_VIRTUAL
public:
virtual ~CMyWnd();
protected:
CPoint m_prePoint; //检测鼠标移动
void DrawBitmap(CDC& dc, int nIndexBit);
//{{AFX_MSG(CMyWnd)
afx_msg void OnPaint();
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnDestroy();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
MyWnd.cpp 文件:
……
CMyWnd::CMyWnd()
{
m_prePoint=CPoint(-1, -1);
}
LPCSTR CMyWnd::lpszClassName=NULL;
BOOL CMyWnd::Create()
{
if(lpszClassName==NULL)
{
lpszClassName=AfxRegisterWndClass(CS_HREDRAW CS_VREDRAW,
::LoadCursor(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_NOCURSOR)));
//注册类;IDC_NOCURSOR为新建光标的ID,这个光标没有任何图案
}
CRect rect(0, 0, ::GetSystemMetrics(SM_CXSCREEN),
::GetSystemMetrics(SM_CYSCREEN));
CreateEx(WS_EX_TOPMOST, lpszClassName, _T(“”), WS_VISIBLE WS_POPUP,
rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
GetSafeHwnd(), NULL, NULL); //创建一个全屏窗口
SetTimer(ID_TIMER, 500, NULL);//计时器,ID_TIMER别忘了定义
return TRUE;
}
为了防止同时运行两个相同的程序 , 下面两个函数是必需的:
void CMyWnd::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CWnd::OnActivate(nState,pWndOther,bMinimized);
if (nState==WA_INACTIVE)
PostMessage(WM_CLOSE);
}
void CMyWnd::OnActivateApp(BOOL bActive, HTASK hTask)
{
CWnd::OnActivateApp(bActive, hTask);
if (!bActive) //is being deactivated
PostMessage(WM_CLOSE);
}
OnPaint()函数将全屏窗口置为黑色:
void CMyWnd::OnPaint()
{
CPaintDC dc(this);
CBrush brush(RGB(0,0,0));
CRect rect;
GetClientRect(rect);
dc.FillRect(&rect, &brush);
}
由计数器调用DrawBitmap()函数,切换图片;注意,下面两个函数中的IDB_BITMAP1, dc.BitBlt(0,0,800,600……以及if(nIndexBit=5)中的有关数据依据你的bmp图片个数、尺寸、位置不同而不同 , 我是选择了5张800x600的bmp图片 。注意,ID值是连续的,IDB_BITMAP1最小 。
void CMyWnd::DrawBitmap(CDC &dc, int nIndexBit)
{
CDC dcmem;
dcmem.CreateCompatibleDC(&dc);
CBitmap m_Bitmap;
m_Bitmap.LoadBitmap(IDB_BITMAP1+nIndexBit);
dcmem.SelectObject(m_Bitmap);
dc.BitBlt(0,0,800,600,&dcmem,0,0,SRCCOPY);
}
void CMyWnd::OnTimer(UINT nIDEvent)
{
CClientDC dc(this);
static nIndexBit=0;
if(nIndexBit=5)
nIndexBit=0;
DrawBitmap(dc, nIndexBit++);
CWnd::OnTimer(nIDEvent);
}
响应键盘、鼠标是屏幕保护程序不可缺少的 , 在OnKeyDown()、 OnLButtonDown()、 OnMButtonDown()、OnRButtonDown()、OnSysKeyDown()函数中都加入:
PostMessage(WM_CLOSE);
OnMouseMove()函数比较特殊,它应加的代码为:
if(m_prePoint == CPoint(-1,-1))
m_prePoint = point;
else if(m_prePoint!=point)
PostMessage(WM_CLOSE);
快要完工了 。在OnDestroy()函数中删掉计时器:KillTimer(ID_TIMER);
还有啦,在CMyWnd::PostNcDestroy() 中加入: delete this;
哎呀,腰酸背疼,眼球发涩,手背奇麻(不会吧)!不过,相信你一定会迫不及待地按下Ctrl+F5, 看着一幅幅图片在你面前轮番展示,啊 , 自己的屏幕保护程序!赶快赶快,换上自制的屏保,感觉就是不一样:图片任你挑 , 时间间隔任你改,鼠标?键盘?我想响应谁就响应谁……哎呀,谁扔的纸团:( 。
其实,上面的程序还有很多可以改进的地方,比如图片总是单一地显示;bmp 文件太大,导致生成的屏幕保护程序也很大,远没有jpg合算;没有密码,没有可直接控制的界面 。由于InitInstance()函数的简单处理(直接调用CMyWnd类) , 你会发现当你在桌面上右击,选择“属性”、“屏幕保护程序”页、“屏幕保护程序”下拉菜单、选中MyScreensaver时,MyScreensaver就直接预览了(或是直接运行了);假设你确定MyScreensaver作为你的屏幕保护程序,等你第二次进入“屏幕保护程序”页时,就直接预览 。Why? 回头看看InitInstance()函数就明白了 。为了让它更听话地工作,可修改InitInstance()函数:
LPTSTR lpszArgv = __argv[1];
if (lpszArgv[0] ==‘/’)
lpszArgv++;
if (lstrcmpi(lpszArgv, _T(“s”))==0)
{
CMyWnd* pWnd=new CMyWnd;
pWnd-Create();
m_pMainWnd=pWnd;
return TRUE;
}
return FALSE;
不过现在你要是再在VC中运行这个程序 , “该程序执行了非法操作,即将关闭 。将会伴随着一超重低音供你欣赏 。(?。浚┰蚴俏颐羌恿艘痪鋜eturn FALSE; 还有,别忘了还有一个CMyScreensaverDlg类没有用上 , 用它来与你的屏保直接对话再好不过了 。例如,为了方便地确定时间间隔,选取图片 , 加上一个编辑框和几个按钮就可以了 。重申一点,由于生成文件较大,占用的内存也多,如果不能运行 , 很可能是开的窗口太多了 。这时你可以换较小的图片 。
单击退出程序的VB代码怎么写1.输入Private Sub Form1 Click()EndEnd Sub
2.输入Private Sub Command1_Click()
3.输入UnloadmeEnd Sub即完成
扩展资料
在VB中,注释有2种方式 。
1.以Rem关键字开头,并且Rem关键字与注释内容之间要加一个空格 。注释可以是单独的一行 , 也可以写在其他语句行的后面 。如果在其他语句行后使用Rem关键字,则必须使用冒号(:)与语句隔开 。
2.也可以使用一个撇号来代替Rem关键字,若使用撇号,则在其他语句行使用时不必加逗号 。
参考资料:百度百科 vb
【vb.net退出屏保 vb退出全屏】vb.net退出屏保的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于vb退出全屏、vb.net退出屏保的信息别忘了在本站进行查找喔 。
推荐阅读
- 怎么下载钉钉群直播课件,钉钉的直播课怎么下载
- mysql如何禁止用户登录,mysql禁止访问
- 固态硬盘怎么看外观大小,固态硬盘如何看大小
- phpcms自动生成id,phpcms生成html
- 包含java错误代码112的词条
- go语言语法视频,go语言视频教程
- 怎么给硬盘制作u盘,怎么给硬盘制作u盘系统
- mysql建立一个数据库,mysql数据库新建一个数据库
- 怎么测试oracle连接 oracle如何测试连接