所学5
来源:互联网 发布:检测域名是否被墙 编辑:程序博客网 时间:2024/06/01 20:45
1.自己捕捉特定的组合键:
--------------------------------------------------------------
BOOL CMMDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
BOOL b = GetAsyncKeyState(VK_CONTROL) >> ((sizeof(short) * 8)-1);
if(b)
{
b = GetAsyncKeyState(VK_MENU) >> ((sizeof(short) * 8)-1);
if(b)
{
b = GetAsyncKeyState(65) >> ((sizeof(short) * 8)-1); //这里不分大小写
if(b)
{
AfxMessageBox("你按下了Ctrl+Alt+A组合键。") ;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
-------------------------------------------------------------
另外,GetAsyncKeyState和::GetKeyState这两个函数也可以帮你检测Shift、Ctrl和Alt这些键的状态。
2.快速从得到的全路径文件名中分离出盘符、路径名、文件名和后缀名:
------------------------------------------------
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
GetModuleFileName(0,path_buffer,_MAX_PATH);
_splitpath( path_buffer, drive, dir,fname , ext); //用这个函数转换
------------------------------------------------
3.快速从数字的字符串中提取出特定长度的数字:
-------------------------------------------------------
int a[4];
sscanf("2004115819185","%07d%02d%02d%02d",&a[0],&a[1],&a[2],&a[3]); //按指定长度分隔
--------------------------------------------------------
或:
-------------------------------------------------------
CString s="aaa,bbb,ccc,ddd";
char a1[4],a2[4],a3[4],a4[4]; //这里要注意多留点空间以存放各子串的长度
sscanf(s,"%[^,],%[^,],%[^,],%[^,]",a1,a2,a3,a4); //按指定字符(这里是逗号)分隔
AfxMessageBox(a4);//显示ddd
-------------------------------------------------------
4.json [{},{}]数组 "{ }"字符串
5.其实%I64d就是打印很大的整数
6.151 改变CStatic控件的前景、背景色:http://community.csdn.net/Expert/topic/4507 /4507710.xml?temp=.1524164
处理WM_CTLCOLOR消息:
---------------------------------------------------------------------
HBRUSH CQQDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
// TODO: Change any attributes of the DC here
if(CTLCOLOR_STATIC == nCtlColor)
//if(CTLCOLOR_STATIC == nCtlColor && pWnd->GetDlgCtrlID()==IDC_TOOL) //改成这样就只对IDC_TOOL这一个静态文本控件起作用了
{
pDC->SetBkColor(RGB(255,255,255)); //背景色为白
pDC->SetTextColor(RGB(0,0,0)); //前景色为黑
hbr = CreateSolidBrush(RGB(255,255,255)); //其它区域也为白
//上面三行代码改成下面这三行就创建空心刷子,就可以实现在背景上写字的效果了
//pDC->SetBkMode(TRANSPARENT);
//pDC->SetTextColor(RGB(0,0,0));
//hbr = CreateStockObject(NULL_BRUSH);
}
else
hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Return a different brush if the default is not desired
return hbr;
}
----------------------------------------------------------------------
再加一个判断if (pWnd->GetDlgCtrlID()==IDC_....)就可以指定是改变哪个的颜色了,其它控件的颜色的改变方法和这个大同小异。
7.SW_HIDE 不会根据层次将焦点还原给下层窗口,所以记得只有最小化和关闭消息才会将焦点还原给下层
8.SetWindowspos 最后一个参数别传空!!! 隐藏调用后会使其他窗体丢失焦点的!!
9.获取置顶窗口父窗口句柄
m_hActWnd = ::GetForegroundWindow();
// HWND hTemp = NULL;
// while(TRUE)
// {
// hTemp = m_hActWnd;
// hTemp = ::GetParent(hTemp);
//
// if (hTemp == NULL)
// {
// break;
// }
// }
10.如何不让子窗口跟父窗一起最小化?貌似只有让它们断绝“父子关系”。
Examlpe:
CXxxDlg Xxxdlg=new CXxxDlg();
Xxxdlg->Create(IDD_XXX_QUOTE);
Xxxdlg->ShowWindow(SW_SHOW);
解决方法:可以让创建子窗口时指定其父窗口为桌用即可
CXxxDlg Xxxdlg=new CXxxDlg();
Xxxdlg->Create(IDD_XXX_QUOTE, GetDesktopWindow());
Xxxdlg->ShowWindow(SW_SHOW);
11.如何设置焦点到所指定窗体 注:如果激活窗口卡死的话,会卡在PALOG("step 5");这个地方
PALOG("step 1");
HWND hForeWnd = ::GetForegroundWindow();
PALOG("step 2");
DWORD dwForeID = GetWindowThreadProcessId(hForeWnd, NULL);
PALOG("step 3");
DWORD dwCurID = GetCurrentThreadId();
PALOG("step 4");
AttachThreadInput(dwCurID, dwForeID, TRUE);
PALOG("step 5");
m_edtPayCode.SetFocus();
PALOG("step 6");
AttachThreadInput(dwCurID, dwForeID, FALSE);
PALOG("step 7");
12.还是焦点问题 窗体create.(id,父窗体); 后,创建窗体会默认被置顶
所以在创建窗体的初始化函数中要加上
ModifyStyle(0, WS_EX_NOACTIVATE, SWP_NOACTIVATE);
--------------------------------------------------------------
BOOL CMMDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
BOOL b = GetAsyncKeyState(VK_CONTROL) >> ((sizeof(short) * 8)-1);
if(b)
{
b = GetAsyncKeyState(VK_MENU) >> ((sizeof(short) * 8)-1);
if(b)
{
b = GetAsyncKeyState(65) >> ((sizeof(short) * 8)-1); //这里不分大小写
if(b)
{
AfxMessageBox("你按下了Ctrl+Alt+A组合键。") ;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
-------------------------------------------------------------
另外,GetAsyncKeyState和::GetKeyState这两个函数也可以帮你检测Shift、Ctrl和Alt这些键的状态。
2.快速从得到的全路径文件名中分离出盘符、路径名、文件名和后缀名:
------------------------------------------------
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
GetModuleFileName(0,path_buffer,_MAX_PATH);
_splitpath( path_buffer, drive, dir,fname , ext); //用这个函数转换
------------------------------------------------
3.快速从数字的字符串中提取出特定长度的数字:
-------------------------------------------------------
int a[4];
sscanf("2004115819185","%07d%02d%02d%02d",&a[0],&a[1],&a[2],&a[3]); //按指定长度分隔
--------------------------------------------------------
或:
-------------------------------------------------------
CString s="aaa,bbb,ccc,ddd";
char a1[4],a2[4],a3[4],a4[4]; //这里要注意多留点空间以存放各子串的长度
sscanf(s,"%[^,],%[^,],%[^,],%[^,]",a1,a2,a3,a4); //按指定字符(这里是逗号)分隔
AfxMessageBox(a4);//显示ddd
-------------------------------------------------------
4.json [{},{}]数组 "{ }"字符串
5.其实%I64d就是打印很大的整数
6.151 改变CStatic控件的前景、背景色:http://community.csdn.net/Expert/topic/4507 /4507710.xml?temp=.1524164
处理WM_CTLCOLOR消息:
---------------------------------------------------------------------
HBRUSH CQQDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
// TODO: Change any attributes of the DC here
if(CTLCOLOR_STATIC == nCtlColor)
//if(CTLCOLOR_STATIC == nCtlColor && pWnd->GetDlgCtrlID()==IDC_TOOL) //改成这样就只对IDC_TOOL这一个静态文本控件起作用了
{
pDC->SetBkColor(RGB(255,255,255)); //背景色为白
pDC->SetTextColor(RGB(0,0,0)); //前景色为黑
hbr = CreateSolidBrush(RGB(255,255,255)); //其它区域也为白
//上面三行代码改成下面这三行就创建空心刷子,就可以实现在背景上写字的效果了
//pDC->SetBkMode(TRANSPARENT);
//pDC->SetTextColor(RGB(0,0,0));
//hbr = CreateStockObject(NULL_BRUSH);
}
else
hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Return a different brush if the default is not desired
return hbr;
}
----------------------------------------------------------------------
再加一个判断if (pWnd->GetDlgCtrlID()==IDC_....)就可以指定是改变哪个的颜色了,其它控件的颜色的改变方法和这个大同小异。
7.SW_HIDE 不会根据层次将焦点还原给下层窗口,所以记得只有最小化和关闭消息才会将焦点还原给下层
8.SetWindowspos 最后一个参数别传空!!! 隐藏调用后会使其他窗体丢失焦点的!!
9.获取置顶窗口父窗口句柄
m_hActWnd = ::GetForegroundWindow();
// HWND hTemp = NULL;
// while(TRUE)
// {
// hTemp = m_hActWnd;
// hTemp = ::GetParent(hTemp);
//
// if (hTemp == NULL)
// {
// break;
// }
// }
10.如何不让子窗口跟父窗一起最小化?貌似只有让它们断绝“父子关系”。
Examlpe:
CXxxDlg Xxxdlg=new CXxxDlg();
Xxxdlg->Create(IDD_XXX_QUOTE);
Xxxdlg->ShowWindow(SW_SHOW);
解决方法:可以让创建子窗口时指定其父窗口为桌用即可
CXxxDlg Xxxdlg=new CXxxDlg();
Xxxdlg->Create(IDD_XXX_QUOTE, GetDesktopWindow());
Xxxdlg->ShowWindow(SW_SHOW);
11.如何设置焦点到所指定窗体 注:如果激活窗口卡死的话,会卡在PALOG("step 5");这个地方
PALOG("step 1");
HWND hForeWnd = ::GetForegroundWindow();
PALOG("step 2");
DWORD dwForeID = GetWindowThreadProcessId(hForeWnd, NULL);
PALOG("step 3");
DWORD dwCurID = GetCurrentThreadId();
PALOG("step 4");
AttachThreadInput(dwCurID, dwForeID, TRUE);
PALOG("step 5");
m_edtPayCode.SetFocus();
PALOG("step 6");
AttachThreadInput(dwCurID, dwForeID, FALSE);
PALOG("step 7");
12.还是焦点问题 窗体create.(id,父窗体); 后,创建窗体会默认被置顶
所以在创建窗体的初始化函数中要加上
ModifyStyle(0, WS_EX_NOACTIVATE, SWP_NOACTIVATE);
0 0
- 所学5
- 2017.4.5所学
- 所学所学所学TSSSSSSSSSSSSSSSSS
- 2007年5月15日 今日之所学
- [今日所学] 第5天 LeetCode Power of Three
- 所学何事?
- 090928所学
- 今天所学!
- 今天所学
- 今日所学
- 最近所学
- 今日所学
- 所学知识
- 所学2
- 所学3
- 所学4
- 所学6
- 所学7
- Dotween
- file_get_contents("php://input") 微信的回调接口
- 初步学习Qt布局
- rabbitmq-c 的编译记录
- 空值判断
- 所学5
- RXJava 创建操作符
- 实现dup2函数(不使用fcntl)
- 正则表达式
- 阶段总结
- python 愚人排序
- 分布式Session原理,最简单而高效的实现方式
- AT25C02程序编写及疑问解析
- 准备在CSDN知识库建立一个Ext JS的知识库