VC++6.0里的光标文件,首先它是一个资源文件。和其它资源(如位图)一样,你可以在代码里面使简余薯用它,也可以不用。
光标资源文件,通常用来改变程序中,鼠标移动到某些位置后改变鼠标光标样式(如CS里面的瞄准镜毁银),最简单的,就是在OnMouseMove消息响应函数中调用SetCursor函数即可。拦者
::SetCursor(::LoadCursor(NULL,IDC_SIZENESW))MFC默认的光标、图标是由MFC底层代码完成的。当然,我们是不能修改MFC的底层代码的。创建之前
而应该:
方法1:
在PreCreateWindow函数,定义一个自己的窗口类
HINSTANCE AfxGetInstanceHandle( )这个函数返回当前应用程序实例的句柄。
DefWindowProc默认的窗口函数。注意,这里用的是全局API函数,前面要有::
菜单不是这个时候加上去的,而是在应用程序类的初始化函数加上去的,所以暂时先设置为NULL
然后注册这个窗口类
改变cs的属性类名为刚刚定义的这个类。
在框架窗口中只能修改图标等没被View覆盖的。
光标修改:应该在View类中的PreCreateWindow修改,将cs属毁戚性类名为刚刚定义的这个类。
这个方法麻烦!
方法2:
使用纤烂陵下面这个函数:
LPCTSTR AFXAPI AfxRegisterWndClass( UINT nClassStyle, HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, HICON hIcon = 0 )
nClassStyle 为样式 参看 WndClass的style成员。msdn
在框架类的PreCreateWindow函数中 用它修改图标。
在视图类的PreCreateWindow函数中,用它修改背景、光历哗标、画刷。
创建之后
方法1:
SetClassLong函数
The SetClassLong function replaces the specified 32-bit (long) value at the specified offset into the extra class memory or the WNDCLASSEX structure for the class to which the specified window belongs.
DWORD SetClassLong(
HWND hWnd, // handle of window
int nIndex, // index of value to change
LONG dwNewLong // new value
)
用法查看msdn 注意类型转换。
——————————————————————————————————————————————
所以,朋友,像你说的那种情况,需要自制光标,现在网上也有很多现成的代码可以用~~自己再找找吧~~
首先要添加鼠标光标(Cursor)文件(*.cur)到工程中,然后需要为应或旦用程序添加WM_SETCURSOR消息用::SetCursor(AfxGetApp()->LoadCursor(图标ID));函数设置就可以了,该函数可以在任意处使用,这就意味着你可以随时改变鼠标的光标
修改应用程序的图标首先要添加图标衫宽扰文件(*.ico)到工程中,然后把应用程序原有的窗口图标文件删除,将新加的图标文件的ID修改成程序原有图标的ID就可以了。
或者在窗口类或视图类的构造函数中加入如下代码:
m_hIcon = AfxGetApp()->LoadIcon(要加入巧塌的图标的ID)
以下是动态修改鼠标光标的示例代码:
BOOL CXcDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
CPoint pos
::GetCursorPos(&pos)
ScreenToClient(&pos)
if((pos.x>250&&pos.x<290)&&(pos.y>150&&pos.y<190))//当鼠标处在某一区域内时修改鼠标光标
{
::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1))
return true
}
/*else
{
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW))
return true
}*/
return CDialog::OnSetCursor(pWnd, nHitTest, message)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)