MFC,无边框的对话框如何实现窗体大小调整。。。。。。。。。

s31628 2010-12-10 09:12:02
一直没有实现,最后50分啦
希望你帮我解决:

提供一个最简单的无边框对话框能用鼠标拖动来调整窗体大小的代码

或者

指正我看下我的代码有什么问题

任一都可


以下是我测试的关键代码:

按网上的相关文章,我自己按一个方式来实现,
1、将资源对话框的border设置为none
2、响应 WM_NCHITTEST WM_SETCURSOR WM_NCLBUTTONDOWN 这三个消息。

消息处理函数:

UINT CXXXDlg::OnNcHitTest(UINT nHitTest, CPoint point)
{
CRect rect;
GetWindowRect(&rect);
if(point.x <= rect.left+3)
return HTLEFT;
else if(point.x >= rect.right-3)
return HTRIGHT;
else if(point.y <= rect.top+3)
return HTTOP;
else if(point.y >= rect.bottom-3)
return HTBOTTOM;
else if(point.x <= rect.left+10 && point.y <= rect.top+10)
return HTTOPLEFT;
else if(point.x >= rect.right-10 && point.y <= rect.top+10)
return HTTOPRIGHT;
else if(point.x <= rect.left+10 && point.y >= rect.bottom-10)
return HTBOTTOMLEFT;
else if(point.x >= rect.right-10 && point.y >= rect.bottom-10)
return HTBOTTOMRIGHT;

return 0;
}


BOOL CXXXDlg::OnSetCursor(HWND hWnd, UINT nHitTest, UINT message)
{
if(nHitTest == HTCAPTION || nHitTest == HTSYSMENU ||
nHitTest == HTMENU || nHitTest == HTCLIENT)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));
}
else if(nHitTest == HTTOP || nHitTest == HTBOTTOM)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS)));
}
else if(nHitTest == HTLEFT || nHitTest == HTRIGHT)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));
}
else if(nHitTest == HTTOPLEFT || nHitTest == HTBOTTOMRIGHT)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE)));
}
else if(nHitTest == HTTOPRIGHT || nHitTest == HTBOTTOMLEFT)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW)));
}
else
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));
}
}


void CXXXDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
if(nHitTest == HTTOP)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
else if(nHitTest == HTBOTTOM)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
else if(nHitTest == HTLEFT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_LEFT, MAKELPARAM(point.x, point.y));
else if(nHitTest == HTRIGHT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_RIGHT, MAKELPARAM(point.x, point.y));
else if(nHitTest == HTTOPLEFT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
else if(nHitTest == HTTOPRIGHT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y));
else if(nHitTest == HTBOTTOMLEFT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y));
else if(nHitTest == HTBOTTOMRIGHT)
SendMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y));
}


不过我发现鼠标在移动到窗体的边缘时,并不会出现可拖放的鼠标样式,而且也改变不了窗体大小


于是我把该窗体的Client Edge设置 为true,这样,就可以实现理想的效果了。可是这样的问题是窗体会有一个很明显的边,很难看,既然打算用无边框的窗体,那么这个边还是不打算设置



谁有办法解决这个问题?????不要边,却能实现窗体大小的调整?
...全文
1017 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
傻X 2010-12-10
  • 打赏
  • 举报
回复
建议换种放大和缩小的模式.然后千万要注意不要频繁出发刷新.
s31628 2010-12-10
  • 打赏
  • 举报
回复
刚你说“mSizeX,mSizeY是窗口最大宽高”,原来其实他是窗体可呗调整的最小大小
问题在这

嗯,十分的感谢 joey_zoy和大家。问题已经解决。
只是分太少了,挺不好意思的,非常感谢!
joey_zoy 2010-12-10
  • 打赏
  • 举报
回复
肯定是没有问题的,自己再调调吧
joey_zoy 2010-12-10
  • 打赏
  • 举报
回复
上面有些变量是我自己程序里面的定义
FRAME_TOP_SIZE这个定义上面边框的宽度,主要是为了鼠标在顶端一小部分矩形中拖动才有效,而不是不管拖动哪里都可以将界面移动,如果不需要else中PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));这一句就可以了

mEnableWindowSize这个变量作用是区分窗口是否可以放大缩小,自己决定值

我这个类是我程序所有对话框的基类,有的窗口需要放大缩小,有的不需要
mSizeX,mSizeY是对话框能缩放的最小值
s31628 2010-12-10
  • 打赏
  • 举报
回复
感谢2楼和大家的恢复,不过现在按2楼的方式,程序有问题,拖的时候很乱,一按下鼠标还没拖呢,就改变大小了,我不知道是不是这个 FRAME_TOP_SIZE 的定义??你怎么定义的?

还有,mEnableWindowSize 这个只有读取没有设置,应该是TRUE吧?

谢谢,添麻烦了,这么点分,都不好意思问了
s31628 2010-12-10
  • 打赏
  • 举报
回复
还有,FRAME_TOP_SIZE 你定义的是多少?
joey_zoy 2010-12-10
  • 打赏
  • 举报
回复
int mMouseStates;
OnMouseMove()函数里面不是赋值了么
向立天 2010-12-10
  • 打赏
  • 举报
回复
一楼的方法应该可以啊
Eleven 2010-12-10
  • 打赏
  • 举报
回复
上面那么多代码还没解决?
s31628 2010-12-10
  • 打赏
  • 举报
回复
问2楼:
mMouseStates 从何而来?
fandh 2010-12-10
  • 打赏
  • 举报
回复
是鼠标点击下,准备拉的时候,调用函数:SetCapture,这样,在MOVE中改变大小,可以用SetWindowPos ,改变完成后,调用ReleaseCapture 释放鼠标!
zzw820626 2010-12-10
  • 打赏
  • 举报
回复
提供个简单的想法,当鼠标移到窗口边缘的时候吧类型改为Client Edge,拖完再改回去。
joey_zoy 2010-12-10
  • 打赏
  • 举报
回复
重载OnLButtonDown,OnMouseMove,OnSizing

void CMyFrameDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
switch(mMouseStates)
{
case HTLEFT:
case HTRIGHT:
::SetCursor(LoadCursor(NULL, IDC_SIZEWE));
break;
case HTTOP:
case HTBOTTOM:
::SetCursor(LoadCursor(NULL, IDC_SIZENS));
break;
case HTTOPLEFT:
case HTBOTTOMRIGHT:
::SetCursor(LoadCursor(NULL, IDC_SIZENWSE));
break;
case HTTOPRIGHT:
case HTBOTTOMLEFT:
::SetCursor(LoadCursor(NULL, IDC_SIZENESW));
break;
default:
::SetCursor(LoadCursor(NULL, IDC_ARROW));
break;
}

if (mMouseStates == HTTOP)
PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
else if (mMouseStates == HTBOTTOM)
PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
else if (mMouseStates == HTLEFT)
PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_LEFT, MAKELPARAM(point.x, point.y));
else if (mMouseStates == HTRIGHT)
PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_RIGHT, MAKELPARAM(point.x, point.y));
else if (mMouseStates == HTTOPLEFT)
PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
else if (mMouseStates == HTBOTTOMRIGHT)
PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y));
else if (mMouseStates == HTTOPRIGHT)
PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y));
else if (mMouseStates == HTBOTTOMLEFT)
PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y));
else
{
CRect rect;
GetClientRect(&rect);
rect.bottom = FRAME_TOP_SIZE;
if(rect.PtInRect(point))
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
}




CDialog::OnLButtonDown(nFlags, point);
}

void CMyFrameDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(mEnableWindowSize && !IsZoomed())
{


CRect rect;
GetClientRect(&rect);
if (point.x <= rect.left + 5 && point.y <= rect.top + 5)
mMouseStates = HTTOPLEFT;
else if (point.x >= rect.right - 5 && point.y >= rect.bottom - 5)
mMouseStates = HTBOTTOMRIGHT;
else if (point.x >= rect.right - 5 && point.y <= rect.top + 5)
mMouseStates = HTTOPRIGHT;
else if (point.x <= rect.left + 5 && point.y >= rect.bottom - 5)
mMouseStates = HTBOTTOMLEFT;
else if (point.x <= rect.left + 5)
mMouseStates = HTLEFT;
else if (point.x >= rect.right - 5)
mMouseStates = HTRIGHT;
else if (point.y <= rect.top + 5)
mMouseStates = HTTOP;
else if (point.y >= rect.bottom - 5)
mMouseStates = HTBOTTOM;
else
mMouseStates = 0;

switch (mMouseStates)
{
case HTLEFT:
case HTRIGHT:
::SetCursor(LoadCursor(NULL, IDC_SIZEWE));
break;
case HTTOP:
case HTBOTTOM:
::SetCursor(LoadCursor(NULL, IDC_SIZENS));
break;
case HTTOPLEFT:
case HTBOTTOMRIGHT:
::SetCursor(LoadCursor(NULL, IDC_SIZENWSE));
break;
case HTTOPRIGHT:
case HTBOTTOMLEFT:
::SetCursor(LoadCursor(NULL, IDC_SIZENESW));
break;
default:
::SetCursor(LoadCursor(NULL, IDC_ARROW));
break;
}

}

CDialog::OnMouseMove(nFlags, point);
}

void CMyFrameDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
CDialog::OnSizing(fwSide, pRect);
if(mEnableWindowSize)
{
switch(fwSide)
{
case WMSZ_LEFT:
pRect->left = min(pRect->left, pRect->right - mSizeX);
break;
case WMSZ_RIGHT:
pRect->right = max(pRect->right, pRect->left + mSizeX);
break;
case WMSZ_TOP:
pRect->top = min(pRect->top, pRect->bottom - mSizeY);
break;
case WMSZ_BOTTOM:
pRect->bottom = max(pRect->bottom, pRect->top + mSizeY);
break;
case WMSZ_TOPLEFT:
pRect->left = min(pRect->left, pRect->right - mSizeX);
pRect->top = min(pRect->top, pRect->bottom - mSizeY);
break;
case WMSZ_BOTTOMRIGHT:
pRect->right = max(pRect->right, pRect->left + mSizeX);
pRect->bottom = max(pRect->bottom, pRect->top + mSizeY);
break;
case WMSZ_TOPRIGHT:
pRect->right = max(pRect->right, pRect->left + mSizeX);
pRect->top = min(pRect->top, pRect->bottom - mSizeY);
break;
case WMSZ_BOTTOMLEFT:
pRect->bottom = max(pRect->bottom, pRect->top + mSizeY);
pRect->left = min(pRect->left, pRect->right - mSizeX);
break;
default:
break;
}
}
// TODO: Add your message handler code here
}

mSizeX,mSizeY是窗口最大宽高
jacky_qiu 2010-12-10
  • 打赏
  • 举报
回复
添加以下代码即可,
示例工程下载:
http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC/18%20%E6%97%A0%E8%BE%B9%E6%A1%86%E7%AA%97%E5%8F%A3%E5%AE%9E%E7%8E%B0%E6%8B%96%E6%8B%89%E6%95%88%E6%9E%9C.zip

阿弥陀佛!



UINT CDemoDlg::OnNcHitTest(CPoint point)
{
CRect rect;
GetWindowRect(&rect);
if(point.x <= rect.left+3)
return HTLEFT;
else if(point.x >= rect.right-3)
return HTRIGHT;
else if(point.y <= rect.top+3)
return HTTOP;
else if(point.y >= rect.bottom-3)
return HTBOTTOM;
else if(point.x <= rect.left+10 && point.y <= rect.top+10)
return HTTOPLEFT;
else if(point.x >= rect.right-10 && point.y <= rect.top+10)
return HTTOPRIGHT;
else if(point.x <= rect.left+10 && point.y >= rect.bottom-10)
return HTBOTTOMLEFT;
else if(point.x >= rect.right-10 && point.y >= rect.bottom-10)
return HTBOTTOMRIGHT;

return CDialog::OnNcHitTest(point);
}


VC++ MFC 经典教程 - 基础篇 1.CP_YourFirstWindowsProgram.mp4 10.MFC_GDI_画直线和曲线.mp4 11.MFC_GDI_画椭圆_多边形及其他形状.mp4 12.MFC_GDI_画笔和画刷.mp4 13.MFC_GDI_画文本和字体.mp4 14.MFC_GDI_备用对象和取消选定.mp4 15.MFC_Ruler.mp4 16.MFC_窗口滚动条.mp4 17.MFC_Accel.mp4 18.MFC_Accel(2).mp4 19.MFC_消息框.mp4 2.Windows_编程模型.mp4 20MFC_客户区鼠标消息.mp4 21.MFC_TicTac-1.mp4 22.MFC_TicTac-2.mp4 23.MFC_TicTac-3.mp4 24.MFC_鼠标滚轮.mp4 25.MFC_捕获鼠标.mp4 26.MFC_VisualKB-1.mp4 27.MFC_VisualKB-2.mp4 29.MFC_菜单.mp4 3.MFC_第一个MFC程序设计.mp4 30.MFC_CButton类.mp4 31.MFC_E_FontView-1.mp4 32.MFC_E_FontView-2.mp4 33.MFC_CEdit类.mp4 34.MFC_MyPad.mp4 35.MFC_对话框_静态文本_编辑框.mp4 36.MFC_对话框_访问控件_7种方法_A.mp4 37.MFC_对话框_访问控件_7种方法_B.mp4 38.MFC_对话框_访问控件_7种方法_C.mp4 39.MFC_对话框_复选框_单选钮.mp4 4.MFC_消息映射.mp4 40.MFC_模态对话框.mp4 41.MFC_非模态对话框.mp4 42.MFC_属性表.mp4 43.MFC_公用对话框.mp4 44.MFC_数组类-1.mp4 45.MFC_数组类-2.mp4 46.MFC_CArray.mp4 47.MFC_列表类.mp4 48.MFC_映射类.mp4 49.MFC_类型指针类.mp4 5.MFC_使用向导快速进行MFC程序设计.mp4 50.MFC_CFile.mp4 51.MFC_CArchive.mp4 52.MFC_四个对象四种方法.mp4 53. MFC_Ruler.mp4 54.MFC_Ruler.mp4 55.MFC_Ruler.mp4 56.MFC_SdiSquares.mp4 57.MFC_Scroll_Ruler.mp4 58.MFC_CHtmlView.mp4 59.MFC_CTreeView.mp4 6.MFC_字符集和TEXT宏.mp4 60.MFC_CListView.mp4 61.MFC_MdiSquares.mp4 62.MFC_动态拆分窗口.mp4 63.MFC_ToolBar.mp4 64.MFC_ToolBar_Ex13a.mp4 65.MFC_StatusBar.mp4 66.MFC_StatusBar_Ex13b.mp4 67.MFC_Rebar.mp4 68.MFC_EZPrint.mp4 69.MFC_Print_Bubble.mp4 7.MFC_建立应用程序.mp4 8.MFC_第一个MFC程序设计(不用向导).mp4 9.MFC_Windows_GDI_设备描述表类.mp4 数据结构与算法_C语言 01.swap.mp4 02.BubbleSort.mp4 03.SelecttionSort.mp4 04.顺序查找.mp4 05.C_DS_折半查找.mp4 06.递归.mp4 07递归算法_折半查找.mp4 08.Permutations.mp4 09.插入排序.mp4 10.快速排序.mp4 11.归并排序.mp4 12.顺序栈.mp4 13.顺序队列.mp4 14.链表的基本概念.mp4 15.单链表的基本运算.mp4 16.循环单链表.mp4 17.双向链表.mp4 18.链式栈.mp4 19.链式队列.mp4 20.基数排序.mp4 21.树.mp4 22.二叉树的存储表示与实现.mp4 23.二叉树的遍历.mp4 24.二叉查找树.mp4 25.红黑树.mp4 26.堆.mp4 27.堆排序.mp4 28.哈希表.mp4 29.图_邻接矩阵
VC实例精通一书的源码。 第2章(\Chapter02) 示例描述:本章介绍常用Win32控件的使用方法。 01_EditDemo 演示静态文本、文本框、按钮控件的使用方法 02_CheckBoxDemo 演示复选框和单选按钮控件的使用方法。 03_ComboBoxDemo 演示组合框和列表框控件的使用方法。 04_ScrollBarDemo 演示滚动条控件的使用方法。 05_SpinDemo 演示数值调节按钮的使用方法。 06_ProgressDemo 演示进度条控件的使用方法。 07_SliderDemo 演示滑块控件的使用方法。 08_HotkeyDemo 演示热键控件的使用方法。 09_ListCtrlDemo 演示列表控件的使用方法。 10_TreeCtrlDemo 演示树形控件的使用方法。 11_RichEditDemo 演示格式文本框的使用方法。 12_TabCtrlDemo 演示属性页的使用方法。 13_AnimateDemo 演示动画控件的使用方法。 14_DateTimeDemo 演示日期时间选择控件的使用方法。 15_CalendarDemo 演示日历控件的使用方法。 16_IPCtrlDemo 演示IP输入框的使用方法。 第3章(\Chapter03) 示例描述:本章介绍高级Win32控件的使用方法。 01_MenuDemo 演示窗体菜单的使用方法。 02_PopMenuDemo 演示弹出式菜单的使用方法。 03_ToolbarDemo 给窗体添加标准工具栏。 04_Toolbar256 使工具栏支持256色位图。 05_StatusBarDemo 在窗体的状态栏区域输出信息。 06_ColorStatusBar 在状态栏添加彩色渐变进度条。 07_ToolTipDemo 使用ToolTip显示即时提示。 第4章(\ Chapter04) 示例描述:本章介绍窗体的使用方法和使用技巧。 01_WindowDemo 演示创建和显示窗体的方法。 02_TopMostWnd 让窗体保持在桌面最顶层。 03_TransparentWindow 创建半透明窗体。 04_EllipticalWindow 创建椭圆窗体。 05_TextPathWnd 创建文字异形窗体。 06_ImagePathWnd 根据图片创建异形窗体。 07_AnimatedWnd 以动画方式显示和隐藏窗体。 08_AutoSize 让窗体上的控件自动适应窗体大小。 09_AutoSizeEx 多个控件改变大小时防止闪烁。 10_LimitSize 限制窗体的最大和最小尺寸。 11_AutoPos 让窗体具有停靠效果。 12_EnumWnd 枚举系统中的窗口。 第5章(\ Chapter05) 示例描述:本章介绍创建对话框以及通用对话框的使用技巧。 01_ModalDlg 显示模式对话框。 02_ModallessDlg 显示非模式对话框。 03_OpenFileDemo 使用打开文件对话框。 04_SaveFileDemo 使用保存文件对话框。 05_FontDlgDemo 使用字体选择对话框。 06_FontDlgDemo_Color 使用字体选择对话框。 07_PreviewFileDlg_Demo 为打开文件对话框增加预览功能。 08_InputDlg_Demo 从内存创建对话框。 第6章(\ Chapter06) 示例描述:本章介绍Windows应用程序消息循环的原理和消息处理技巧。 01_PeekMsgDemo 传递并响应Windows消息。 02_SendMsg 发送Windows消息。 03_MsgInMfc 了解MFC的映射消息机制。 04_UserMsg 使用自定义消息。 05_DoubleEdit_Demo 拦截并处理Win32控件的消息。 第7章(\ Chapter07) 示例描述:本章介绍Windows系统和外壳编程的技巧。 01_TimerDemo 使用计时器。 02_RegDemo 访问系统注册表。 03_SuperPwd 用随机数生成强力密码。 04_ShellOpen 打开一个和程序相关联的文档。 05_ClipboardDemo 访问Windows剪切板。 06_ClipboardMonitor 监视剪切板内容变化。 07_TrayIconDemo 使用系统托盘图标。 第8章(\ Chapter08) 示例描述:本章介绍在应用程序中使用Windows基本设备的方法和技巧。 01_MouseSample 处理鼠标消息。 02_KeyTest 处理键盘消息。 03_MouseMoving 利用客户区鼠标消息拖动无边框窗体。 04_NCMsg 利用非客户区鼠标消息控制无边框窗体。 05_LockMouse 限制鼠标移动区域。 06_MyEvent 模拟键盘鼠标消息。 07_ClipboardHelper 使用系统热键消息使后台程序得到通知。 第9章(\ Chapter09) 示例描述:本章学习Windows进程的创建和管理方法。 01_StartProcess 创建和结束进程。 02_RedirectStdio 用匿名管道获取控制台程序的输出。 03_CatchError 拦截并处理外部进程的错误。 04_SingleInstance 防止应用程序运行多个实例。 05_ProcessMsg 用消息在进程间通讯。 06_MappingFile 用内存映射文件在进程间通讯。 07_ProcessList 枚举并得到系统中所有进程信息。 第10章(\ Chapter10) 示例描述:本章学习Windows线程的创建和管理方法。 01_PrimeNumberFinder 主线程和用户界面。 02_PrimeNumberFinderEx 创建和结束线程。 03_PrimeNumberFinal 用临界区对象同步线程。 04_BigPrimeNumber 用事件对象同步线程。 05_SemaphoreDemo 用信号量对象同步线程。 06_ThreadPriority 调整线程优先级。 第11章(\ Chapter11) 示例描述:本章学习使用VC6进行图形图像开发的技巧。 01_ZoomBitmap 用DC对象缩放位图。 02_DrawLine 用画笔对象画线。 03_BrushDemo 用画刷对象填充区域。 04_RollText 在屏幕上输出文本。 05_PicShow 使用GDI+读取不同格式的图片。 06_PicShowEx 使用GDI+保存不同格式的图片。 07_Snap 制作屏幕截图程序。 08_Watermark 给图片增加版权信息。 第12章(\ Chapter12) 示例描述:本章学习使用VC6进行文件IO开发的技巧。 01_BinaryView 用基本API编写二进制编辑器。 02_MyCompressor 用MFC类编写文件压缩软件。 03_DirMonitor 监控硬盘上文件的变化。 04_HddSpace 获取本机所有磁盘及其空间使用情况。 05_WideText 文本保存及编码方式。 06_XmlReader 读写XML文件。 07_SerialPort 读写串口数据。 第13章(\ Chapter13) 示例描述:本章学习使用VC6进行数据库开发的方法和技巧。 01_ODBC_Source 创建ODBC数据源。 02_ODBC_Demo 通过ODBC访问Access数据库。 03_ADO_Demo 通过ADO访问据库。 04_ExecProc 调用SQL Server的存储过程。 05_TransExec 事务处理SQL Server命令。 06_BinData 存取数据库中的图片。 07_CreateMdb 在程序中动态生成Access数据库。 第14章(\ Chapter14) 示例描述:本章学习使用VC6进行网络开发的方法和技巧。 01_UdpClient 建立UDP连接客户端。 02_UdpServer 建立UDP连接服务器端。 03_TcpClient 建立TCP连接客户端。 04_TcpServer 建立TCP连接服务器端。 05_MfcSock 使用MFC的SOCKET类。 06_MyWebProtocol 注册自己的浏览器地址栏协议。 07_GetHttpStr 抓取网页内容。 08_VisualPing 基于ICMP编写网络速度监控程序。 第15章(\ Chapter15) 示例描述:本章介绍一些Windows高级编程技术。 01_AppSnap 制作鼠标HOOK。 02_PasswordShow 用鼠标HOOK读取密码框中的内容。 03_KeyVoice 制作键盘HOOK。 04_SysKey 用键盘HOOK屏蔽系统按键。 05_DlgSkinDemo 用HOOK技术给对话框换肤。 06_PeExport 分析DLL文件获取其导出函数列表。 第16章(\ Chapter16) 示例描述:本章介绍VC6在多媒体开发方面的应用技术。 01_BgMusic 用基本API播放声音。 02_MP3Player 用MCI播放音频。 03_MyReal 调用RealPlayer播放音频文件。 04_Recorder 制作录音机程序。 05_GifCtrl 在VC中显示动态的GIF动画。 06_FlashWnd 在VC中播放Flash动画。 07_MediaPlayer 在VC中播放视频。 08_CaptureVideo 在VC中实现视频采集及截图功能。 第17章(\ Chapter17) 示例描述:本章介绍VC6在ActiveX方面的应用技术。 01_MyActiveX 创建ActiveX控件。 02_MyActiveX2 为ActiveX控件增加属性和方法。 03_ActiveXInDlg 在应用程序中使用ActiveX控件。 04_ActiveXInWeb 在浏览器中使用ActiveX控件。 05_MyActiveX3 在VC中显示动态的GIF动画。 06_RegOCX 在程序中注册和注销ActiveX控件。 第18章(\ Chapter18) 示例描述:本章介绍如何将应用程序制作成完整的应用软件的技术。 01_MyHelp 制作帮助文件。 02_Setup 制作安装程序。 03_MultiLanguage 让应用程序界面支持多语言。 04_MultiLanguageEx 多语言的字符串常量。 05_SetupEx 制作多语言的安装程序。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧