利用 FindWindow 查找句柄一例
利用Spy++ 察看到此程序使用的主 Class
然后使用
CWnd *p = CWnd::FindWindow("类名",NULL);
if (NULL == p){
MessageBox("此程序未启动");
}else{
MessageBox("找到此程序");
}
[ZT]线程本地存储(Thread Local Storage, TLS)
在多线程编程中, 同一个变量, 如果要让多个线程共享访问, 那么这个变量可以使用关键字volatile进行声明; 那么如果一个变量不想使多个线程共享访问, 那么该怎么办呢? 呵呵, 这个办法就是TLS, 线程本地存储. 它的使用非常之简单, 只要对变量的声明使用__declspec(thread)就OK了. 下面我来举一个例子, 结合注释, 相信大家马上就能知道其”奥秘”了.


#include "stdafx.h"
#include <stdio.h>
__declspec(thread) int g_nData = 0; //这就是两个线程都要访问的变量

DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
   g_nData = 5;
   //辅线程睡眠100ms, 保证主线程的g_nData = 10; 语句执行成功
   Sleep(100);
   char szMsg[40] = {0};
   sprintf(szMsg, "Auxi thread, g_nData: %d", g_nData);
   MessageBox(NULL, szMsg, "AuxiThread", MB_ICONINFORMATION);
   return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR     lpCmdLine,
                    int       nCmdShow)
{
   // TODO: Place code here.
   DWORD dwId;
   //创建线程, 并立即启动它
   HANDLE hThread = CreateThread(NULL, 1024, ThreadProc, NULL, 0, &dwId);
   assert(hThread);
   //主线程睡50ms, 保证辅线程的g_nData = 5; 语句执行成功
   Sleep(50);
   g_nData = 10;
   char szMsg[40] = {0};
   sprintf(szMsg, "Result: %d", g_nData);
   MessageBox(NULL, szMsg, "MainThread", MB_ICONINFORMATION);
   return 0;
}

大家自己编译运行这个程序就会发现, 如果不使用TLS, 那么结果都是10; 如果使用TLS, 那么主, 助线程的结果将各不影响. 这下你该知道TLS是怎么回事了吧.
当然, 更复杂的TLS, 就会需要用到Windows TLS的API: TlsAlloc, TlsFree, TlsSetValue, TlsGetValue了; 进一步还需要同步互斥等等.
Visual C++窗体设计技巧集2006-10-13 13:45如何制作透明窗体
  使用SetLayeredWindowAttributes可以方便的制作透明窗体,此函数在w2k以上才支持,而且如果希望直接使用的话,可能需要下载最新的SDK。不过此函数在w2k的user32.dll里有实现,所以如果你不希望下载巨大的sdk的话,可以直接使用GetProcAddress获取该函数的指针。



  SetLayeredWindowAttributes的函数原型如下:

BOOL SetLayeredWindowAttributes(
HWND hwnd, // handle to the layered window
COLORREF crKey, // specifies the color key
BYTE bAlpha, // value for the blend function
DWORD dwFlags // action
);


Windows NT/2000/XP: Included in Windows 2000 and later.
Windows 95/98/Me: Unsupported.(注意了,在win9x里没法使用的)
Header: Declared in Winuser.h; include Windows.h.
Library: Use User32.lib.


  一些常量:
VC编程小知识
Posted in VC&C# on 2006/11/27 / 评论(0) »
1. 如何获取应用程序的实例句柄?
应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用
AfxGetInstancdHandle获得句柄.
Example: HANDLE hInstance=AfxGetInstanceHandle();


2. 如何通过代码获得应用程序主窗口的指针?
主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMainWnd实现。
AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最大化.

CString/string/char *比较详解

(一)  概述
string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;
CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);
char*为C编程中最常用的字符串指针,一般以'\0'为结束标志;
分页: 7/17 第一页 上页 2 3 4 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]