FindWindow返回HWND类型的句柄。在MSDN上关于SetFocus函数的介绍,其中有一句很关键“该窗口必须与调用线程的消息队列相关。”意思就是说在窗口线程中才可以对这个窗口SetFocus(),估计你是别的线程中对查找到的窗口,然后使用SetFocus,所以失败了。
创新互联建站专注于企业成都营销网站建设、网站重做改版、旌阳网站定制设计、自适应品牌网站建设、H5开发、商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为旌阳等各大城市提供网站开发制作服务。
SetFocus函数的说明:
函数功能:该函数对指定的窗口设置键盘焦点。该窗口必须与调用线程的消息队列相关。
函数原型:HWND
SetFocus(HWND
hWnd)。
参数:
hWnd:接收键盘输入的窗口指针。若该参数为NULL,则击键被忽略。
返回值:若函数调用成功,则返回原先拥有键盘焦点的窗口句柄。若hWnd参数无效或窗口未与调用线程的消息队列相关,则返回值为NULL。若想要获得更多错误信息,可以调用GetLastError函数。
/*
广义表的实现
author: kk.h
date: 2006.10
*/
#include "stdio.h"
typedef struct node
{
int tag;
union{struct node *sublist;
char data;
}dd;
struct node *link;
}NODE;
/* 递归创建广义表,注意参数比较复杂,指针的指针 */
NODE *creat_GL(char **s)
{
NODE *h;
char ch;
ch=*(*s);
(*s)++;
if(ch!='\0')
{
h=(NODE*)malloc(sizeof(NODE));
if(ch=='(')
{
h-tag=1;
h-dd.sublist=creat_GL(s);
}
else
{
h-tag=0;
h-dd.data=ch;
}
}
else
h=NULL;
ch=*(*s);
(*s)++;
if(h!=NULL)
if(ch==',')
h-link =creat_GL(s);
else
h-link=NULL;
return(h);
}
/* 递归打印广义表 */
vOId prn_GL(NODE *p)
{
if(p!=NULL)
{
if(p-tag==1)
{
printf("(");
if(p-dd.sublist ==NULL)
printf(" ");
else
prn_GL(p-dd.sublist );
}
else
printf("%c",p-dd.data);
if(p-tag==1)
printf(")");
if(p-link!=NULL)
{
printf(",");
prn_GL(p-link);
}
}
}
/* 递归复制广义表 */
NODE *copy_GL(NODE *p)
{
NODE *q;
if(p==NULL) return(NULL);
q=(NODE *)malloc(sizeof(NODE));
q-tag=p-tag;
if(p-tag)
q-dd.sublist =copy_GL(p-dd.sublist );
else
q-dd.data =p-dd.data;
q-link=copy_GL(p-link);
return(q);
}
/* 求表的深度函数(有错误?) */
int depth(NODE *p)
{
int h,maxdh;
NODE *q;
if(p-tag==0) return(0);
else
if(p-tag==1p-dd.sublist==NULL) return 1;
else
{
maxdh=0;
while(p!=NULL)
{
if(p-tag==0) h=0;
else
{q=p-dd.sublist;
h=depth(q);
}
if(hmaxdh)
maxdh=h;
p=p-link;
}
return(maxdh+1);
}
}
/* 求原子结点的个数函数 */
int count(NODE *p)
{
int m,n;
if(p==NULL) return(0);
else
{
if(p-tag==0) n=1;
else
n=count(p-dd.sublist);
if(p-link!=NULL)
m=count(p-link);
else m=0;
return(n+m);
}
}
main()
{
NODE *hd,*hc;
char s[100]="(a,(b,(c,d)))",*p;
/*p=gets(s);*/
p=s;
hd=creat_GL(p);
hc=copy_GL(hd);
printf("\ncopy after:");
prn_GL(hc);
printf("\ndepth=%d (wrong?)",depth(hc));
printf("\ncount=%d",count(hc));
getch();
}
/*
只有C H O N元素
C 12。01 H 1。008 O 16。00 N 14。01
输入C6H5OH
输出94.108
*/
#includestdio.h
int main()
{
printf("请输入化学式:\n");
char c;
int count_c=0,count_h=0,count_o=0,count_n=0;
double mass=0.0;
int count=0;
scanf("%c",c);//读取第一个字符
while(c!='\n') //读取字符直到回车
{
switch (c) { //处理四种情况,四种元素
case 'C': //C元素
scanf("%c",c); //读取下一个字符
if((c='0')(c='9'))//如果下一个是数字则准备读该数字否则准备该元素加一
count=0;
else count=1;
while((c='0')(c='9'))//读取元素符号后面的数字
{
count=count*10+(c-'0');
scanf("%c",c);
}
count_c+=count;//累加该种元素
break;
case 'H':
scanf("%c",c);
if((c='0')(c='9'))
count=0;
else count=1;
while((c='0')(c='9'))
{
count=count*10+(c-'0');
scanf("%c",c);
}
count_h+=count;
break;
case 'O':
scanf("%c",c);
if((c='0')(c='9'))
count=0;
else count=1;
while((c='0')(c='9'))
{
count=count*10+(c-'0');
scanf("%c",c);
}
count_o+=count;
break;
case 'N':
scanf("%c",c);
if((c='0')(c='9'))
count=0;
else count=1;
while((c='0')(c='9'))
{
count=count*10+(c-'0');
scanf("%c",c);
}
count_n+=count;
break;
default:
printf("error;bad input\n");
break;
}//end switch
}//end while
//printf("C%dH%dO%dN%d\n",count_c,count_h,count_o,count_n);
mass=12.01*count_c+1.008*count_h+16.00*count_o+14.01*count_n;//计算总质量
printf("mass:%lf\n",mass);//输出总质量
system("pause");//暂停等待用户继续
}