-
VC++ .NET 实现窗口内控件自适应屏幕尺寸大小而变化
VC++ .NET 实现窗口内控件自适应屏幕尺寸大小而变化,这个具体点就是,窗口中的边框和按钮等元素,会随着窗口的变大自动变大,并保持原有的比例,调用了CSelfResizeWindow::Rectify()来实现,我觉得是个很实用的窗体设计技巧。关于本源代码的几点说明:
自定义类CSelfResizeWindow实现窗口和控件的自适应,根据屏幕尺寸调整大校
使用步骤 :
1. 使需要自适应的窗口类继承于类CSelfResizeWindow,在OnInitDialog()中调用
__super::Init(this, 1, 3000);(其中1和3000是资源ID的范围,在Resource.h
中用宏定义的,Init函数的参数根据情况确定。)
2. 给窗口类添加OnSize()消息响应函数,在OnSize()函数
中调用__super::Rectify();即可。
- 2023-01-25 01:40:04下载
- 积分:1
-
VC++ gethostbyname获取主机名和IP地址
VC++ 获取主机名和IP地址,也就是根据主机名获得IP地址,使用了gethostbyname函数,然后再使用addr.Format格式化获取到IP地址。具体来看以下代码获取到IP地址:
// 获得主机ip地址
struct hostent * phost;
phost = gethostbyname(szhostname);//根据主机名获得IP地址
m_strName=szhostname;
int h_length=4;
for( int j = 0; j {
CString addr;
if( j > 0 )
str += ".";
addr.Format("%u", (unsigned int)((unsigned char*)phost->h_addr_list[0])[j]);
str += addr;
}
m_strIP=str;
- 2022-11-09 11:50:03下载
- 积分:1
-
又一个简单的VC++ 定时关机功能实现
又一个简单的VC++ 定时关机功能实现,程序运行后屏蔽最大化,将最小化重定向至隐藏窗口,在Windows托盘处显示图标,双击该图标可调用出定时关机设置窗口。具体实现定时关机功能的代码如下:
// 将图标放入系统托盘
TrayNotifyMsg(NIM_ADD, IDR_MAINFRAME, "定时关机");
// 初始化关机时间为23点.
SYSTEMTIME systime;
((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_TIME))->GetTime(&systime);
systime.wHour = 23;
systime.wMinute = 0;
systime.wSecond = 0;
((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_TIME))->SetTime(&systime);
// 设定定时器
SetTimer(1, 1000, NULL);
// 显示当前的系统时间
ShowCurrentTime();
return TRUE; // return TRUE unless you set the focus to a control
}
- 2022-02-02 22:49:18下载
- 积分:1
-
3个VC++ win注册表编程操作实例
本源码中有三个VC++操作表的相关例子,每一个都属于比较简单那种,展示注册表的操作技巧,有兴趣的下载源码包。
HKEY hKEY; //定义有关的 hKEY, 在查询结束时要关闭。
LPCTSTR data_Set="SoftwareMicrosoftWindowsCurrentVersion"; //子键目标
//打开与路径 data_Set 相关的 hKEY,第一个参数为根键名称,第二个参数表。
//表示要访问的键的位置,第三个参数必须为0,KEY_READ表示以查询的方式。
//访问注册表,hKEY则保存此函数所打开的键的句柄。
long retopen=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set, 0, KEY_READ, &hKEY));
if(retopen!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
{
MessageBox("错误: 无法打开有关的hKEY!");
return;
}
//查询有关的数据 (系统用户姓名 owner_Get)。
LPBYTE owner_Get=new BYTE[80];
DWORD type_1=REG_SZ ;
DWORD cbData_1=80;
//hKEY为刚才RegOpenKeyEx()函数所打开的键的句柄,"RegisteredOwner"。
//表示要查 询的键值名,type_1表示查询数据的类型,owner_Get保存所。
//查询的数据,cbData_1表示预设置的数据长度。
//与RegQureyValueEx()类似,hKEY表示已打开的键的句柄,"RegisteredOwner"
//表示要访问的键值名,owner_Set表示新的键值,type_1和cbData_1表示新值。
//的数据类型和数据长度
UpdateData(true);//获得编辑框数据
if(m_Adduser.IsEmpty()||m_Addpassword.IsEmpty())//用户名、密码不能为空
{
AfxMessageBox("输入用户名、密码不能为空!");
return;
}
- 2022-02-22 09:55:12下载
- 积分:1
-
VC++ 通过读写文件实现登录对话框
文件读写:通过读写文件实现登录对话框,执行时将创建 MySaveFile 文件夹,在文件 pwd.ini 中生成密码,并向pwd.ini文件中写入初始密码888. 然后关闭文件,登录时,将读取文件中的内容,并判断用户的输入是否和pwd.ini 文件中存储的用户名和密码一致,从而判断用户是否可以正确登录。
- 2022-06-26 14:35:10下载
- 积分:1
-
VC Calendar 自定义的日历选择插件
VC++ 6.0 Calendar 自定义的日历选择插件,这个功能相信大家都比较熟悉了,是用来选择日期和时间的,避免用户输入出错,选择后可把数据填充在指定的文本框内,或提交至下一个数据处理环节。这个例子是前两年的,风格和Windows XP相似,与Windows7和10版本有所区别,核心代码为:
//设置选择日期
void CCalendarDlg::OnSetCursel()
{
//更新变量
UpdateData(TRUE);
//构造日期变量
CTime tm(m_nYear,m_nMonth,m_nDay,0,0,0);
m_MonthCalCtrl.SetCurSel(tm);
}
//设置日期
void CCalendarDlg::OnSetToday()
{
//更新变量
UpdateData(TRUE);
//构造日期变量
CTime tm(m_nYear,m_nMonth,m_nDay,0,0,0);
m_MonthCalCtrl.SetToday(&tm);
m_MonthCalCtrl.SetCurSel(tm);
}
- 2022-01-25 19:36:09下载
- 积分:1
-
VC 使用LineDDA画有节点的连线实例
本源码主要演示使用VC ++中的LineDDA画有节点的连线,画出的效果可参见截图所示。
//画线
pDC->MoveTo(10,10);
pDC->LineTo(300,300);
//使用LineDDA沿线按一定间隔画“0”
//这个回调例程将在线上每个点处被调用
//实现注解:使用lpData传递用于绘图的CDC对象的引用
CDC* pDC;
pDC = (CDC*)lpData;
if( X % 20 ==0)
{
pDC->TextOut(X,Y,_T("0"));
}
- 2022-02-19 23:13:45下载
- 积分:1
-
VC++ 音乐播放器 源代码
VC++ 音乐播放器 例子,支持播放列表 ,支持常规的播放控制,自制了界面,从这个播放器软件中,你可以学习到软件界面方面的编写技巧以及音乐播放方面的技巧,运行效果如下图所示。本源码对学习VC++软件编程有很好的借鉴作用。
- 2022-05-20 10:54:09下载
- 积分:1
-
VC++ FTP、HTTP 多线程断点续传下载文件
VC++ FTP、HTTP 多线程断点续传下载文件,在断点下载时,可获取远程站点信息,如:是否支持断点续传、要下载的文件大小和创建时间等。可设置下载的线程数、下载任务的线程函数、多线程断点续传下载一个文件、关于BOOL bForceDownload/*=FALSE*/的定义,如果为 TRUE 表示强制性重新下载,以下载的部分将会被删除,FALSE 表示断点续传,并创建多线程下载使用的对象和数据缓冲、删除多线程下载使用的对象和数据缓冲。
启动多线程下载,返回 0 表示失败,1表示成功,2表示不用下载了,因为该文件已经下载过了
智能判断要保存的文件是否已经存在,且大小和创建时间一致,如果不是强制性下载,则不需要再下载了。
- 2022-03-19 00:12:39下载
- 积分:1
-
简单演示多线程的创建和使用VC++源码
一个VC++ Win32程序执行单元——多线程 的创建和使用例子,测试时请在CMD控制台中运行Exe,之后看到的运行结果如图所示,代码部分,请参考以下:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全
DWORD dwStackSize, // 堆栈大小
LPTHREAD_START_ROUTINE lpStartAddress, // 起始地址(函数名)
LPVOID lpParameter, // 参数
DWORD dwCreationFlags, // 是否启动
LPDWORD lpThreadId // 新生成的线程ID
);
int main(int argc, char* argv[])
{
HANDLE hThreadProc;
DWORD dwThreadId;
hThreadProc=CreateThread(
NULL,
NULL,
ThreadProc,
NULL,
0, //使线程立即运行
&dwThreadId
);
printf("Now another thread has been created,ID=%d
",dwThreadId);
//等待新线程运行结果
::WaitForSingleObject(hThreadProc,INFINITE);
::CloseHandle(hThreadProc);
return 0;
}
- 2022-03-26 13:48:22下载
- 积分:1