全局变量的声明和静态变量的声明怎么搞,求问

cj2cf99 2013-05-12 05:37:24
我的目的是枚举窗口并且获得其标题名,最后通过获得pid来终结目标窗口
打算使用的函数是
EnumWindows
EnumWindowsProc
GetWindowThreadProcessId
建立了一个vc的对话框,三个listbox分别对应 标题名,进程号,线程号
在**dlg类里静态声明EnumWindowsProc,
但是在EnumWindowsProc完全无法使用非全局变量的玩意,所以想声明一个静态的int n 和
全局变量 string buff[], 请问在哪里声明,怎么声明,

static int n;
extern string buff[100];

这个编译器报错 error C2146: syntax error : missing ';' before identifier 'buff'
求问

没分了,不好意思,只有这些了
...全文
181 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-05-21
  • 打赏
  • 举报
回复
你不需要额外定义任何东西,直接在调用处,传入EnumWindowsProc,并把对话框的this指针传给给lParam参数(通过强制转换)就可以了。上面是代码。EnumWindowsProc返回TRUE,EnumWindows 会循环调用EnumWindowsProc,EnumWindowsProc返回FALSE,就会结束EnumWindows函数对他的调用
lm_whales 2013-05-21
  • 打赏
  • 举报
回复
BOOL CALLBACK EnumWindowsProc(
  HWND hwnd,      // handle to parent window
  LPARAM lParam   // application-defined value
  )
{
	 if(hwnd){
		CEnumWinDlg *pThis =(CEnumWinDlg *)(LPVOID)(LONG)lParam;
		DWORD pID,threadID;
		TCHAR s[1024];
        memset(s,0,1024);
		GetWindowText(hwnd,s,1024);
		pThis->m_listTitle.AddString(s);

		threadID= GetWindowThreadProcessId(hwnd,&pID); 
		pThis->m_listPID.AddString(_itot(pID,s,10));
		pThis->m_listThreadID.AddString(_itot(threadID,s,10));

		return TRUE;
    }
    return FALSE;
}
void CEnumWinDlg::OnButton1() 
{
	m_listTitle.ResetContent();		
    m_listPID.ResetContent();
	m_listThreadID.ResetContent();
    EnumWindows(EnumWindowsProc,(LPARAM)(LONG)(LPVOID)this);

}
benlypan 2013-05-13
  • 打赏
  • 举报
回复
引用 楼主 cj2cf99 的回复:
我的目的是枚举窗口并且获得其标题名,最后通过获得pid来终结目标窗口 打算使用的函数是 EnumWindows EnumWindowsProc GetWindowThreadProcessId 建立了一个vc的对话框,三个listbox分别对应 标题名,进程号,线程号 在**dlg类里静态声明EnumWindowsProc, 但是在EnumWindowsProc完全无法使用非全局变量的玩意,所以想声明一个静态的int n 和 全局变量 string buff[], 请问在哪里声明,怎么声明, static int n; extern string buff[100]; 这个编译器报错 error C2146: syntax error : missing ';' before identifier 'buff' 求问 没分了,不好意思,只有这些了
你的思路错了。 EnumWindows的第二个参数传入this指针。 然后在回调函数把lParam参数强制转化成窗口指针,这样通过这个指针就能操作窗口里面的东西了。
赵4老师 2013-05-13
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
syscofield 2013-05-13
  • 打赏
  • 举报
回复
我也在思考 o
passion_wu128 2013-05-13
  • 打赏
  • 举报
回复
类对象不要声明成全局变量。
就是那个党伟 2013-05-12
  • 打赏
  • 举报
回复

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧