1、VC一些小细节VC一些小细节 1 vc+中 WM_QUERYENDSESSION WM_ENDSESSION 为系统xi tong关机消息xiao xi。2 在VC下执行zhi hangDOS命令ming ling a. system(md c:12); b. WinExec(Cmd.exe /C md c:12, SW_HIDE); c. ShellExecute ShellExecute(NULL,open,d:WINDOWSsystem32cmd.exe,/c md d:zzz,SW_SHOW); d. CreateProcess 下面这个示例的函数han shu可以把给定的DOS命令m
2、ing ling执行zhi hang一遍,并把DOS下的输出shu chu内容记录在 buffer中。同时示范了匿名管道重定向zhong ding xiang输出shu chu的用法: - BOOL CDOSDlg:ExecDosCmd() #define EXECDOSCMD dir c: /可以换成你的命令ming ling SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHand
3、le = TRUE; if (!CreatePipe(&hRead,&hWrite,&sa,0) return FALSE; char command1024; /长达1K的命令ming ling行ming ling hang,够用了吧 strcpy(command,Cmd.exe /C ); strcat(command,EXECDOSCMD); STARTUPINFO si; PROCESS_INFORMATION pi; si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdError = hWr
4、ite; /把创建进程jin cheng的标准错误cuo wu输出shu chu重定向zhong ding xiang到管道输入shu ru si.hStdOutput = hWrite; /把创建进程jin cheng的标准输出shu chubiao zhun shu chu重定向zhong ding xiang到管道输入shu ru si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; /关键步骤,CreateProcess函数han shu参数can shu意义请查阅MSDN
5、 if (!CreateProcess(NULL, command,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi) CloseHandle(hWrite); CloseHandle(hRead); return FALSE; CloseHandle(hWrite); char buffer4096 = 0; /用4K的空间kong jian来存储输出shu chu的内容,只要不是显示xian shi文件wen jianxian shi wen jian内容,一般情况qing kuang下是够用了。 DWORD bytesRead; while (t
6、rue) if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) = NULL) break; /buffer中就是执行zhi hang的结果,可以保存到文本wen ben,也可以直接输出shu chu AfxMessageBox(buffer); /这里是弹出对话框dui hua kuang显示xian shi CloseHandle(hRead); return TRUE; -3删除shan chu目录,包含删除shan chu子文件wen jian夹以及其中的内容 - BOOL DeleteDirectory(char *DirName)/
7、如删除shan chu DeleteDirectory(c:aaa) CFileFind tempFind; char tempFileFindMAX_PATH; sprintf(tempFileFind,%s*.*,DirName); BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind); while(IsFinded) IsFinded=(BOOL)tempFind.FindNextFile(); if(!tempFind.IsDots() char foundFileNameMAX_PATH; strcpy(foundFileName,t
8、empFind.GetFileName().GetBuffer(MAX_PATH); if(tempFind.IsDirectory() char tempDirMAX_PATH; sprintf(tempDir,%s%s,DirName,foundFileName); DeleteDirectory(tempDir); else char tempFileNameMAX_PATH; sprintf(tempFileName,%s%s,DirName,foundFileName); DeleteFile(tempFileName); tempFind.Close(); if(!RemoveDi
9、rectory(DirName) MessageBox(0,删除shan chu目录失败!,警告信息xin xi,MB_OK);/比如没有找到文件wen jian夹,删除shan chu失败,可把此句删除shan chu return FALSE; return TRUE; -4让程序暂停zan tingcheng xu zan ting:system(PAUSE);5 在PreTranslateMessage中捕捉键盘jian pan事件shi jian if (pMsg->message=WM_KEYDOWN && pMsg->wParam=VK_RETURN)
10、return TRUE; /注意return的值6 更改按键消息xiao xi(下面的代码dai ma可把回车键消息xiao xi改为TAB键消息xiao xi) - BOOL CT3Dlg:PreTranslateMessage(MSG* pMsg) if(pMsg->message = WM_KEYDOWN && VK_RETURN = pMsg->wParam) pMsg->wParam = VK_TAB; return CDialog:PreTranslateMessage(pMsg); -7 MoveWindow: 一个可以移动、改变窗口chuang
11、 kou位置wei zhi和大小的函数han shu8 16进制转化成10进制小数的问题wen ti 用一个读二进制er jin zhi文件wen jianer jin zhi wen jian的软件ruan jian读文件wen jian 二进制er jin zhi文件wen jianer jin zhi wen jian中的一段 8F C2 F5 3C 最后变成了 0.03 请问这是怎么转换zhuan huan过来的? 方法fang fa一:浮点技术法,如 DWORD dw=0x3CF5C28F; float d=*(float*)&dw;/0.03;方法fang fa二:浮点的储
12、存方式和整数完全两样,你想了解的话可以去 看一看,不过通常我们都不必了解它就可以完成转换zhuan huan。char a4 = 0x8F, 0xC2, 0xF5, 0x3C;float f;memcpy(&f,a,sizeof(float); TRACE(%d,0x3CF5C28F);9 EDIT控件的EM_SETSEL,EM_REPLACESEL消息xiao xi10 在其它进程jin cheng中监视键盘jian pan消息xiao xi:用SetWindowsHookEx(WH_KEYBOARD_LL,.);13 在桌面zhuo mian上任意位置wei zhi写字 - HDC
13、 deskdc = :GetDC(0); CString stext = 我的桌面zhuo mian; :TextOut(deskdc,100,200,stext,stext.GetLength(); :ReleaseDC(0,deskdc); -14 HWND thread_hwnd=Findwindow(NULL,你要监控的进程jin cheng窗体chuang ti(用SPY看)), if (thread_hwndNULL) 。 else DWORD thread_id=GetWindowThreadProcessId(thread_hwnd,NULL)15 waveOutGetVolu
14、me()可以得到波形bo xing音量大小16 隐藏桌面zhuo mian图标tu biao并禁用右键you jian功能菜单cai dan: - HWND Hwd = :FindWindow(Progman, NULL); if (bShowed) :ShowWindow(Hwd, SW_HIDE); else :ShowWindow(Hwd, SW_SHOW); bShowed = !bShowed; -17 获得程序当前路径lu jing: - char ch256; GetModuleFileName(NULL,ch,255); for(int i=strlen(ch);i &
15、& chi!=;i-); chi=0; AfxMessageBox(ch); -18 KeyboardProc的lParam中包含着许多按键信息xin xi,其中第31位(从0开始)为0表示是按下按键,为1表示松开按键。 (lParam & 0x80000000)进行二进制er jin zhi与计算,效果是取第31位的值。 (lParam & 0x40000000)是取第30位,30位表示按键的上一个状态zhuang tai,为1表示之前键已经是按下的,0表示松开。 lParamin Specifies the repeat count, scan code, exte
16、nded-key flag, context code, previous key-state flag, and transition-state flag. For more information about the lParam parameter, see Keystroke Message Flags. This parameter can be one or more of the following values. 0-15Specifies the repeat count. The value is the number of times the keystroke is
17、repeated as a result of the users holding down the key.16-23Specifies the scan code. The value depends on the OEM.24Specifies whether the key is an extended key, such as a function key or a key on the numeric keypad. The value is 1 if the key is an extended key; otherwise, it is 0.25-28Reserved.29Sp
18、ecifies the context code. The value is 1 if the ALT key is down; otherwise, it is 0.30Specifies the previous key state. The value is 1 if the key is down before the message is sent; it is 0 if the key is up.31Specifies the transition state. The value is 0 if the key is being pressed and 1 if it is b
19、eing released.19 复制文件wen jian应该用到CopyFile或是CopyFileEx这两个API20 移动窗口chuang kou的位置wei zhi或改变大小:MoveWindow/SetWindowPos21 我的程序是当前运行yun hang的程序时,可以用setcursor()来设置she zhi光标guang biao的图标tu biao。 而且可以用setcapture()是鼠标shu biao移动到我得程序窗口chuang kou之外时也是我设置she zhi的图标tu biao 但是如果我得程序不是当前的运行yun hang程序的,鼠标shu biao就会
20、变会默认mo ren的。 怎样能够,使得不变回默认mo ren的,还是用我设置she zhi的光标guang biao? SetSystemCursor22 SendMessage函数han shu的几个用法: 控制kong zhi按钮按下的,是这么用的 SendMessage(n1, WM_COMMAND, MAKELPARAM(ID,BN_CLICKED),(LPARAM )n2);(n1,n2是句柄ju bing) 而得到文本wen ben内容,是这样用的, SendMessage(hWnd,WM_GETTEXT,10,(LPARAM)buf),23 处理一个单行EDIT的WM_CTLC
21、OLOR要同时响应xiang yingnCtlColor = CTLCOLOR_EDIT和CTLCOLOR_MSGBOX的两个情况qing kuang,参考can kao 24 设备发生改变处理函数han shu可在CWnd:OnDeviceChange中,捕获bu huoWMDEVICECHANGE事件shi jian不能区分诸如设备插入、拔下消息xiao xi。25 把字符zi fuabcn123存入文本wen ben文件wen jian中时,文件wen jian内容没看见换行huan hang,其实用word打开该文件wen jian是有换行huan hang的。另外用abcrn123代
22、替也可看见换行huan hang。26 :SetFocus(:GetDesktopWindow(); 或:BringWindowToTop(:GetDesktopWindow();:GetDesktopWindow()这里可获得桌面zhuo mian窗口chuang kou的句柄ju bing27 数组shu zu初始化chu shi hua: int a2434; /声明sheng ming数组shu zu memset(a,-1,24*34); /全部元素初始化chu shi hua成-1,但初始化chu shi hua成除0和-1以外的数值是不行的28 SHGetFileInfo函数ha
23、n shu可获得文件wen jian信息xin xi。29 创建一个控件: HWND hEdit=CreateWindow(EDIT,NULL,WS_CHILD|WS_VISIBLE |ES_LEFT,50,20,50,20,hwnd,NULL,hInst,NULL); /hwnd参数can shu为父窗口chuang kou句柄ju bing30 VC中对声音文件wen jian的操作: 31 调用tiao yong其它程序又要隐藏窗口chuang kou:用CreateProcess函数han shu调用tiao yonghan shu tiao yong,再拿到窗口chuang kou句
24、柄ju bing,然后:ShowWindow(hWnd,SW_HIDE);32 读取du qu文本wen ben文件wen jian中的一行:用CFile类的派生pai sheng类pai sheng lei:CStdioFile的方法fang fa:CStdioFile:ReadString33 删除shan chu非空文件wen jian夹: - SHFILEOPSTRUCT shfileop; shfileop.hwnd = NULL; shfileop.wFunc = FO_DELETE ; shfileop.fFlags = FOF_SILENT|FOF_NOCONFIRMATION
25、; shfileop.pFrom = c:temp; /要删除shan chu的文件wen jian夹 shfileop.pTo = ; shfileop.lpszProgressTitle = ; shfileop.fAnyOperationsAborted = TRUE; int nOK = SHFileOperation(&shfileop); -34 函数han shu前面加上:是什么意思?叫域运算yun suan符.在MFC中表示调用tiao yongAPI.或其它全局函数han shu.为了区分是 mfc函数han shu还是api详见: 35 CImageList的用法: 36 有关控件的一些常见问答: <=很不错的地方哦37 在多文档wen dang客户ke hu区中增加位图wei tu底图演示程序yan shi cheng xu: 我的对应工程:AddBackgroundBitmap38 用VC+6.0实现PC机与单片机dan pi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1