急!高手救我!关于设置窗口图标的奇怪问题。来者给分! 怎么没有标题栏呢,你在对话框的property里面,style选项卡里面的title bar勾上了吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 试试AfxGetApp()->SetIcon(IDR_...); 如果你不能用title bar的话,就只能自己新建一个bitmap资源,然后用DC和CBitmap把手动装载,然后自己画到上面去了,在paint()函数里面写代码BitBlt()函数,可以自己参考MSDN。 2 cloudstrife(c_cloud) 因为这个程序不能用标题栏的,我把他去掉了,就是把style选项卡里面的title bar取消了。有没有办法呢? 2 wxmchuanzhang(小雪) 我试了,没有标题栏,给这个程序加不上窗口图标。 如果你不要标题栏,却想要窗口的图标,可以加入一个PICTURE控件,属性中TYPE为ICON,IMAGE为IDR_MAINFRAME; 2 cloudstrife(c_cloud) 我指的是往任务栏上的提示区(不是系统托盘)加图标。 如果你不要标题栏,却想要窗口的图标,可以加入一个PICTURE控件,属性中TYPE为ICON,IMAGE为IDR_MAINFRAME; 这不就行了 有一个方法可以:你不要在资源编辑器中去掉标题栏!!着一点很重要。直接编辑.rc文件,找到对话框那一向,在style中手动删除WS_CAPTION,OK,编译执行,标题栏没有了,但icon被保留了。good luck 用Shell_NotifyIcon()函数可以实现往托盘中添加图标,另外还需要响应对图标的点击消息 你可以通过构造一个CWindowDC类在上面画图的。 jeff_hunter 说的有理给分吧 2 jeff_hunter(PandaLee)我试了,只要把.rc文件中的WS_CAPTION删掉,资源编辑器中的对话框标题栏就没有了,程序运行还是以前的那个样子,没有图标。 你可以这样,首先在资源编辑中编辑时,不要去掉title bar,在程序运行时,动态去掉title.在initdialog或create中去掉title,程序显示出来后,任务栏上有图标,但程序已经没有title了,ModifyStyle(WS_CAPTION,0,SWP_DRAWFRAME); 加上标题很容易,只需在OnInitDialog()中,用SetWindowText("标题");即可.但要加上图标比较麻烦. 2 zhaoyao73(小赵) 能不能给我一点具体的代码,先谢谢了! 你要在对话框有system menu的情况下这样做,就是在你的对话框可以显示图标时这样做,不信你new一个dialog base的工程试试。在多说一句,你要做CRgn的窗口吧,那有标题栏也不妨碍呀,何必搞的这么麻烦 zhaoyao73(小赵)说的照更正一些,我的是歪招在OnInitDialog()中家ModifyStyle(WS_CAPTION,0,SWP_DRAWFRAME); 就OK,我试了 在onPaint()消息里,判断IsIconic(),如果为真,如下代码: CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); 请tinytot稍等, 马上就有答案了... 我不已经告诉你了吗?在资源编辑器中,把对话框的title bar属性加上,然后用classwizard重载对话框的BOOL CMYdialog::OnInitDialog() { ModifyStyle(WS_CAPTION,0,SWP_DRAWFRAME); }就可以了,你试试 有一个方法是这样的:请你把目前的这个对话框作为第二个对话框。然后重新生成一个对话框,并且把它的客户区的大小改变为0。这样这个对话框在运行的时候就不会显示。把这个新的对话框的Title Bar加上这样一来任务栏中的图标就有了。在这个对话框的InitDialog中再把第二个 POPUP 出来这样就可以了。 首先你在资源编辑框中定义一个图标,然后在加入以下语句 // put icon in system tray NOTIFYICONDATA nid; nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = m_hWnd; nid.uID=ID_MYTRAY; nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; nid.uCallbackMessage=WM_MYTRAY; nid.hIcon=AfxGetApp()->LoadIcon(IDI_MY_ICON); strcpy(nid.szTip,"My Icon Tip"); ::Shell_NotifyIcon(NIM_ADD,&nid);之后,你就可以在托盘区中看到你自己定义的图标。若要删除该图标,最好是在创建图标的程序退出时的WM_CLOSE消息处理中完成: NOTIFYICONDATA nid; nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = m_hWnd; nid.uID=ID_MYTRAY; nid.uFlags=0; ::Shell_NotifyIcon(NIM_DELETE,&nid); tinytot(彧) 你还在关注吗?如果要源码,请说话。 谢谢大家对我倾囊相助,我的问题解决了,尤其感谢zhaoyao73(小赵) 和jeff_hunter(PandaLee) 二位大虾。说吧,你们俩要多少分,以我目前的分只能给到300分。另外,谢谢其他人的参与,每人都有份。 2 victorlee_lq(victor) 当然要了,咱们可以多交流交流,我先谢谢你了。[email protected] 请往这里发。 我的方法是从Delphi和C++ Builder中借鉴而来的... 告诉你个简单的办法,将对话框的Title bar和system menu 都点上,然后用 class wizard 打开WM_NCPAINT 消息,然后什么都不用做了,呵呵run一下即可 2 laolaoli(老李) 你这个方法不好用呀,我试了,不行,还是小赵的方法最好用。 在Project->Options中选Application,再修改其中的ICON即可。 最简单在OnInitDialog中加入SendMessage(WM_SETICON,GetSafeHwnd(),(WPARAM)ICON_SMALL,(LPARAM)hIcon); 再加一行ModifyStyle(0,WS_SYSMENU,0)因为WS_SYSMENU样式是决定小ICON显示与否的关键或者直接改.rc文件在对话框的STYLE中加入WS_SYSMENU,但仍然要加SendMessage(WM_SETICON,GetSafeHwnd(),(WPARAM)ICON_SMALL,(LPARAM)hIcon); 1.先将 Style 中 TileBar 选中。2.AfxGetMainHWnd()->SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), false); 散分,散分.下班时结贴 晕了 怎样打开声音文件? 有一个文件需要 压缩或读入一个压缩文件 解压 (300分,先100系统限制) help,vc技术内幕上的一个问题? 请教随即函数的问题! ActiveX与ATL在哪个用的多阿? 菜鸟关于添加背景的问题,请大家指教! 请问调用window信使服务(即向网络的另一台机子发控制台消息)是用什么涵数,最好有源码,谢谢 那位大虾有用vc使用ADO的源程序或有关ADO的电子书,小弟急用([email protected]) 111222(~动感超人~) 快来拿分吧! 如何学习网络编程?
有没有办法呢?
为IDR_MAINFRAME;
为IDR_MAINFRAME; 这不就行了
给分吧
在initdialog或create中去掉title,程序显示出来后,任务栏上有图标,但程序已经没有title了,ModifyStyle(WS_CAPTION,0,SWP_DRAWFRAME);
但要加上图标比较麻烦.
在多说一句,你要做CRgn的窗口吧,那有标题栏也不妨碍呀,何必搞的这么麻烦
在OnInitDialog()中家ModifyStyle(WS_CAPTION,0,SWP_DRAWFRAME); 就OK,我试了
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
用classwizard重载对话框的
BOOL CMYdialog::OnInitDialog()
{
ModifyStyle(WS_CAPTION,0,SWP_DRAWFRAME);
}就可以了,你试试
请你把目前的这个对话框作为第二个对话框。
然后重新生成一个对话框,并且把它的客户区的大小改变为0。这样这个对话框在运行的时候就不会显示。把这个新的对话框的Title Bar加上这样一来任务栏中的图标就有了。
在这个对话框的InitDialog中再把第二个 POPUP 出来这样就可以了。
// put icon in system tray
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;
nid.uID=ID_MYTRAY;
nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
nid.uCallbackMessage=WM_MYTRAY;
nid.hIcon=AfxGetApp()->LoadIcon(IDI_MY_ICON);
strcpy(nid.szTip,"My Icon Tip");
::Shell_NotifyIcon(NIM_ADD,&nid);
之后,你就可以在托盘区中看到你自己定义的图标。
若要删除该图标,最好是在创建图标的程序退出时的WM_CLOSE消息处理中完成:
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;
nid.uID=ID_MYTRAY;
nid.uFlags=0;
::Shell_NotifyIcon(NIM_DELETE,&nid);
或者直接改.rc文件在对话框的STYLE中加入WS_SYSMENU,但仍然要加SendMessage(WM_SETICON,GetSafeHwnd(),(WPARAM)ICON_SMALL,(LPARAM)hIcon);
2.AfxGetMainHWnd()->SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), false);