注:2010年12月8日发布的Visual Studio 2010?Service Pack 1 Beta解决了该问题。

上次遇到VS2010中尴尬的代码窗口缩放功能,今天确认VS 2010存在一个令人恼火的Bug:

如果你的电脑开着对另外一台电脑的远程桌面连接,你在本机使用VS 2010写代码时,如果Ctrl+C的操作速度过快(据说是半秒之内),Ctrl+C就会失效,对Ctrl+X同样适用。

自从用上VS2010,已经多次遇到这样的问题:在VS2010中用Ctrl+C复制一段代码,用Ctrl+V粘贴时什么内容也没有,光标自动跳至下一行。当时真是又气又急,但再试几下,问题又消失了。想解决这个问题,却无从下手,问题出现没有规律,也无法重现这个问题,只能将这个问题诊断为疑似“VS2010神经质”...

今天在Microsoft Connect看到这个反馈Copy/Paste issue in VS 2010 RC,终于确诊为“VS2010 Ctrl+C 神经质”。

真让人气愤!强大的、令众多非.NET程序员羡慕的VS2010,竟然存在这个Bug。写代码时用的最多快捷键非Ctrl+C莫属,而且这个问题2010年2月15日在VS 2010 RC时,就有人发现并反馈给微软,而微软2010年4月13日才确认这个问题,并且说要等VS2010的Service Pack或下一版本的Visual Studio才去研究这个问题。

不用等微软了,一不小心就可能等到2012,自己动手,丰衣足食吧。

治疗“VS2010 Ctrl+C 神经质”的偏方:

1. 用VS2010写代码时,关闭所有远程桌面连接,或者用第三方的远程桌面连接工具。

2. 如果使用远程桌面连接,请放慢写代码的速度,先选择好要复制的内容,喝杯咖啡,然后再按Ctrl+C。

3. 卡吉洛提供的偏方:把远程桌面的“本地资源 -> 剪贴板”干掉。

欲了解“VS2010 Ctrl+C 神经质”更多详情,请仔细阅读Copy/Paste issue in VS 2010 RC。

转载于:https://www.hack95.com/dudu/archive/2010/06/18/1760337.html

1.最近做了一个项目是在win7 下使用VS2010开发的WinForm软件,在本机运行正常,之后打包安装之后,发现桌面快捷方式无法显示,找了很久,网上资料查了又查,最有在一位朋友的博文提醒下终于搞定了,我发现我的ico图标是150*170px的,一位网友说在XP或者win7下窗口图标或者快捷方式图标大小不能超过128*128px,受此启发,我将图片修改为100*100px,然后使用,结果却是可以显示了,总结,xp或win7下窗口图标或者快捷方式图标大小最好不能超过128*128px,否则导致图标无法加载

2.然后安装到XP下之后,发现软件根本无法运行,启动画面弹出,一闪而过,什么也没有提示,开始很是纳闷,最后终于发现也是图标的问题,在win7下窗口属性选择的ico图标无法加载,然后导致软件无法运行,

解决方法,在主窗口的构造函数中加上如下代码即可:

try

{

??? this.Icon = new System.Drawing.Icon(Application.StartupPath + @"\Resources\xxx.ico");

}

catch(Exception)

{

}

这就可以了,自己总结一下,以便记忆。。。

应用程序的桌面图标

概述

我们平时用到的程序一般都在桌面上有个生动的图标,双击该图标即可启动程序。使用MFC开发的程序默认的图标都是,如果我们想定制自己的个性图标怎么办,下面提供解决方案:

1.创建一个基于对话框的MFC工程,命名为DesktopIconPro.

2.准备一个图标资源,然后插入到工程的资源中。此时你会看到工程的资源ICON文件夹下有两个图标,一个是新插入的IDI_ICON1,另外一个是系统默认的IDR_MAINFRAME。删除系统默认的,将新的命名为IDR_MAINFRAME,编译运行程序即可看到Debug和Release文件夹下的桌面图标已经变了。

系统默认桌名图标: ? ? ? ? 个性化桌面图标:

托盘图标

我们平时启动一个程序后,一般在windows底部工具条右侧都有个托盘图标。当程序窗口最小化时候窗体就回缩到系统托盘,双击此托盘程序图标时候,窗体就再次出现。

该功能只要涉及3个技术点:程序启动时,创建托盘图标;程序退出时,删除托盘图标;单击托盘图标时,显示窗体。

1.创建一个基于对话框的MFC程序,命名为TaskIconPro;

工程采用unicode编码。

2.在对话框类CTaskIconProDlg的OnInitDialog()中创建托盘图标,添加如下两行代码

HICON hicon =(HICON)LoadImage(NULL, L"res\\TIME1.ICO", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);

? ? ? ?TaskBarAddIcon(GetSafeHwnd(),120,hicon,L"SH2上位机软件"); ?//添加任务栏图标

? ? ? (?

题外话:此处虽然用HICON hicon =LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));也能实现功能,但是LoadIcon已经被LoadImage代替,所以还是使用LoadImage。关于LoadImage的使用参考http://www.hack95.com/xiaxiaojing/article/details/44014633)

? ? ? ?

? ? ? ?//添加托盘图标函数

BOOL CTaskIconProDlg::TaskBarAddIcon( HWND hwnd,UINT uID,HICON hicon,CString strTip ) { NOTIFYICONDATA d;//托盘图标结构体 d.cbSize = sizeof(NOTIFYICONDATA);//托盘图标结构体的大小 d.hWnd = hwnd;//托盘图标所属的窗体 d.uID = uID;//托盘图标ID d.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;//托盘图标结构体的属性 d.uCallbackMessage = MY_NOTIFYICON;//设置托盘图标的单击消息 d.hIcon = ?hicon; lstrcpy (d.szTip,strTip);//设置托盘图标的提示 return Shell_NotifyIcon(NIM_ADD,&d);//添加托盘图标(题外话:之前调试程序时候之所以反复不出现图标是因为上面一句原来程序中有if else,而把

return Shell_NotifyIcon(NIM_ADD,&d);放进了else语句中导致执行不了该功能)??

}

//删除托盘图标函数 BOOL CTaskIconProDlg::TaskBarDeleteIcon( HWND hwnd,UINT uID ) { NOTIFYICONDATA d; d.cbSize = sizeof(NOTIFYICONDATA); d.hWnd = hwnd; d.uID = uID; return Shell_NotifyIcon(NIM_DELETE,&d);//删除托盘图标 }

以上代码中关键的技术点有:

1.NOTIFYICONDATA 是用于设置托盘图标的的结构体;

2.设置托盘图标的核心是API函数;

3.关于托盘图标的单击消息,一般在NOTIFYICONDATA结构体的uCallbackMessage成员中设定;(自定义消息)

以上的自定义消息为#define MY_NOTIFYICON ?(WM_USER + 200) ? 记得后面一定不能加;,否则会有一堆问题,如下:

在对话框的头文件中设置,而后需要为它添加自定义消息处理函数和消息映射;

首先在对话框头文件中声明:

LRESULT OnMyIconNotify(WPARAM wparam,LPARAM lparam); //VC6.0中是void类型,VS2010必须是LRESULT类型,否则出错;

然后在对话框cpp文件中添加消息映射:

ON_MESSAGE(MY_NOTIFYICON, &CTaskIconProDlg::OnMyIconNotify)

(题外话:

ON_COMMAND是菜单和工具栏项处理消息的宏

ON_MESSAGE是处理自定义消息的宏?

ON_NOTIFY 是控件向其父窗口发送消息处理的宏)

BOOL CTaskIconProDlg::TaskBarModifyIcon(HWND hwnd, UINT uID, HICON hicon, CString strTip) { NOTIFYICONDATA d; d.cbSize=sizeof(NOTIFYICONDATA); d.hWnd=hwnd; d.uID=uID; d.uFlags=NIF_ICON | NIF_TIP | NIF_MESSAGE; d.uCallbackMessage=MY_NOTIFYICON; d.hIcon=hicon; lstrcpy(d.szTip,strTip); return Shell_NotifyIcon(NIM_MODIFY,&d); }

点击X号退出时候,执行ON_DESTROY消息响应,在消息响应函数中调用删除图标函数;

void CTaskIconProDlg::OnDestroy()

{

CDialogEx::OnDestroy();

// TODO: 在此处添加消息处理程序代码

TaskBarDeleteIcon( GetSafeHwnd(),120);

}

(题外话:添加消息映射可通过类向导-->要添加消息响应的类右键-->消息-->添加处理程序实现)

具体见代码:http://www.hack95.com/detail/xiaxiaojing/8466375