预编译头的处理方式:
添加到最上面 #include "stdafx.h"
或者:
对着.cpp右键--属性--预编译头=不使用预编译头 (但是爆了链接错误...vc驿站没搞了???!!!!)
mfc工程建立
如果编译有错,替换CDialogEx为CDialog..
自绘控件 Owner Draw= true
https://www.bilibili.com/video/av79302998?p=70
https://www.codeproject.com/ 资源网站
这里现在学没有什么意义.......我看完就忘记了................
MFC操纵控件有几种方法....
写一个一按按钮就禁用它自己的功能来展示,双击一个button,
在 void CMFCApplication1Dlg::OnBnClickedBtnLogin() 函数内:
WinApi法,全局函数调用.(最复杂)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
HWND hLoginBtn = ::GetDlgItem( //全局函数,得到目标控件的窗口句柄 GetSafeHwnd(), //哪一个对话框 IDC_BTN_LOGIN); //控件的ID if (hLoginBtn) { ::EnableWindow(hLoginBtn, FALSE);//禁用控件 }
获取指针法(同时掌握)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
CWnd* pLoginBtn = GetDlgItem(IDC_BTN_LOGIN); if (pLoginBtn) { //::EnableWindow(pLoginBtn->GetSafeHwnd(), FALSE); //全局禁用 pLoginBtn->EnableWindow(FALSE); //继承的操作 //EnableWindow(FALSE); //不可以这样,因为这样是禁用了整个对话框 }
控制变量法(最简单) 参考下图
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//为了拿到控件的id,所以要用控件变量->添加控制变量,就不再需要频繁像上面一样获取句柄指针了 m_LoginBtn.EnableWindow(false);
这样就大概了解控件的操作方式,尽可能往最简单的学就好了......太复杂就不叫面向对象了......
其他控件操作可能我要消化一段时间.....