2011-10-10program


2011-10-10program
2011年10月10日
  1.使用ModifyStyleEx改变了控件风格无效
  答:修改之后,重绘一次,如果还不行的话,再试试看调用SetWindowPos(0,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_DRAWFRAME);
  2.动态设置编辑框的ES_PASSWORD无效
  答:修改之后,需要调用一次SetPasswordChar('*');
  3.如何获取任务栏小图标?
  答:有网友提出,能不能在程序界面上显示当前的托盘图标,这样更直观一些。这一点我也曾想到过,也知道奥秘就在TBBUTTON这个结构体的dwData域里面,可惜这个域的结构在MSDN中没有描述。我也曾试着发送TB_GETIMAGELIST消息获取image list的句柄,然后用CImageList::FromHandle加载到CImageList中,但却都失败了。
  在csdn网友的帮助下,我弄清了dwData的结构,其实dwData有一个这样的机构,我们命名为TRAYDATA:
  struct TRAYDATA
  {
  HWND hwnd;
  UINT uID;
  UINT uCallbackMessage;
  DWORD Reserved[2];
  HICON hIcon; //托盘图标的句柄
  };
  要获取到这个hIcon,其实很简单:
  //分配虚拟内存
  lngAddress = VirtualAllocEx(hProcess, NULL, sizeof(TBBUTTON), MEM_COMMIT, PAGE_READWRITE);
  //将hProcess进程内,地址为lngAddress中的内容(大小为sizeof(TBBUTTON))获取到tb中
  ret = ::ReadProcessMemory(hProcess, LPVOID(long(lngAddress)), &tb, sizeof(TBBUTTON), 0);
  //将hProcess进程内,地址为tb.dwData中的内容(大小为sizeof(TRAYDATA))获取到tray中
  ret = ::ReadProcessMemory(hProcess, LPVOID(tb.dwData), &tray, sizeof(TRAYDATA), 0);
  然后就可以用tray.hIcon索引到这个图标句柄了
  //释放内存代码略
  4.BeginWaitCursor和EndWaitCursor无效
  答:SetCapture();BeginWaitCursor();....EndWaitCursor();ReleaseCapture();
  5.打印源码中文件名和行号常用的宏名是什么?
  答:文件名:__FILE__ 行号:__LINE__
  6.如何具体判断一个字符串中哪个是英文字母
  答:函数isalpha
  7.在注册表中如何得到所有安装了的应用程序程序的信息
  答:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下面的子

猜你喜欢

转载自ekj676mq.iteye.com/blog/1357588
10