




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西 南 交 通 大 学信 息 科 学 与 技 术 学 院通 信 工 程 专 业工 程 实 习 报 告(C+类)课题设计报告年 级: 2011 学 号: 姓 名: 专 业: 通信工程 二零一四年七月一、总体设计采用C+实现BPSK信号的调制解调过程,给出在高斯信道下的误码率仿真曲线,并将调制信号波形与频谱、已调信号波形与频谱、解调后信号波形用图形界面显示出来。基本原理:BPSK信号调制原理二进制相移键控 BPSK(Binary Phase Shift Keying)方式一般是键控的载波相位按基带脉冲序列的规律而改变的数字调制方式,也就是说,二进制的数字基带信号 0 与 1 分别用相干调制的载波的
2、 0 与相位的波形来表示。其表达式由公式(1-1)给出: (1-1)其中为双极性的二进制数字序列,的取值为± 1,为二进制的符号间隔,基带的发送成形滤波器的冲激响应,通常具有升余弦特性;是调制载波的频率,是调制载波的初始相位。用 BPSK 调制方式时,因为发送端以某一个相位作为基准,所以在接收端也一定有这样一个固定的基准相位作为参考。假如参考相位发生变化了,那么接收端恢复的信息也会出错,也就是存在“倒”现象。因此需要在接收端使用载波同步,才能够正确恢复出基带的信号。BPSK信号的调制原理框图如图2-1所示,典型波形如图2-2所示。2-1 BPSK调制原理图2-2 发送码元为1 0 0
3、 1 1的BPSK波形BPSK信号的频谱如图2-3所示,可以计算频谱效率,所谓频谱效率是指信号传输速率与所占带宽之比。在BPSK中,信号码元为,故信号传输速率为,以频谱的主瓣宽度为传输带宽,忽略旁瓣的影响,则射频带宽为2/,频谱效率为:(每赫兹) 即每赫兹带宽传输0.5b/s。注意,这里是以射频带宽计算的,若以基带带宽来计算,那就是每赫兹1 b/s。图2-3 BPSK的频谱BPSK的调制器非常简单,只要把数字信号与载波相乘即可。不过这里数字信号的“0”要用“-1”来表示(在数字通信中,符号“1”用“+1”来表示,“0”则用“-1”来表示)。由图2-3可见,BPSK波形与信息代码之间的关系是“异
4、变同不变”,即:若本码元与前一码元相异,则本码元内BPSK信号的初相相对于前一码元内BPSK信号末相变化180°;否则不变。BPSK 信号解调原理因为BPSK信号的幅度与基带信号无关,故不能用包络检波法而只能用相干解调法解调BPSK信号,在相干解调过程中需要用到与接收的BPSK信号同频同相的相干载波,相干接收机模型如图2-4所示: 图2-4 BPSK相干接收机模型具体的BPSK信号解调原理框图如图2-5所示。图2-5 BPSK解调原理框图如图2-5给出了一种BPSK信号相干解调原理框图,图中经过带通滤波的信号在相乘器与本地载波相乘,在相干解调中,如何得到与接收的BPSK信号同频同相的
5、相干载波是关键,然后用低通滤波器去除高频分量,再进行积分采样判决,判决器是按极性进行判决,得到最终的二进制信息。假设相干载波的基准相位于BPSK信号的调制载波的基准相位一致。但是,由于在BPSK信号的载波恢复过程中存在º的相位迷糊(phase ambiguity),即恢复的本地载波与所需的相干载波可能同相,也可能反相,这种相位关系的不确定性将会造成解调出数字基带信号与发送的数字基带信号正好相反,即1变为0,0变为1,判决器输出数字信号全部出错。这种现象称为BPSK方式的倒现象。载波同步器从BPSK信号中提取的相干载波可能与接收信号的载波同相,也可能反相,称此为相干载波的相位模糊现象。
6、如果收到的信号与载波信号同相,则相乘为正值,积分采样后必为一大于0的值,即可判决为“1”。如果收到的信号与参考信号相反,则相乘之后必为负值,积分采样后判决为“0”,因此解调完成。具体波形如图2-6所示。图2-6 BPSK解调信号示意图基本架构设计BPSK 调制解调系统的模型如图3-1所示, 调制部分包括信息源、星座映射、发送滤波器和调制器, 接收部分包括解调器、接收滤波器和抽样判决器,信道干扰为加性高斯噪声。 图3-1 BPSK信号调制解调系统框图整个发送与接收过程仿真了实际中的通信过程,单极性二进制信源经过星座映射变换为一串双极性二进制字符,再经过发送滤波器进行脉冲成形,生成原始的数字基带信
7、号,为了发送信息,通过BPSK调制器变成数字带通信号发射,发射信号进入模拟的加性高斯白噪声信道,被接收机所接收,BPSK信号解调采用的是相干解调,用同步恢复出的载波对接收机收到的信号进行相乘,相干解调恢复出信号经过低通滤波器滤除高频分量,然后依次经过接收滤波器和抽样判决器,恢复最原始的二进制序列,自此完成对数字信号的BPSK调制解调全过程。 模块划分Bpsk调制模块Bpsk解调模块输入输出模块模块功能设计Bpsk调制模块包括:基带数据产生模块单双极性变换模块FFT模块功率信号幅值单位转换模块加载波模块Bpsk解调模块包括:产生高斯白噪声模块去载波模块低通滤波器模块判决模块FFT模块误码率计算模
8、块输入输出模块包括:数据输入模块数据读取模块数据输出模块绘图模块OnPaint()图形界面模块二、 详细设计(一) 资源项目 程序文件 头文件 (二)Bpsk调制模块基带数据产生模块int* CTools:BaseDataPut(long length)int* nBaseDataBit;nBaseDataBit = (int*)malloc(length*sizeof(int);srand(unsigned)time(NULL);for (long i = 0; i<length; i+)*(nBaseDataBit + i) = rand() % 2;return nBaseData
9、Bit;单双极性变换模块int *pnget = NULL;/单双变换后数据pnget = (int*)malloc(m_nNumOfBase*sizeof(int);for (i = 0; i < m_nNumOfBase; i+)pngeti = 1-m_pBaseDatai*2;/单双极性变换FFT模块float *CTools:fft(float *y, long n, long *len) /傅立叶变换; /len:返回补0以后数据长度的一半; /函数输出:fft变换后的数据,长度为len; /若失败,则返回一个空指针(NULL) longi, j, k, m, i1, i2,
10、 i3, i4, n1, n2, n4; floata, e, cc, ss, xt, t1, t2; float*x; longtemp_n; / /自动补零 temp_n=1; while(temp_n<n) temp_n*=2; x=(float *)malloc(temp_n*sizeof(float); if(!x)return NULL; for (i=0;i<n;i+) *(x+i)=*(y+i); if(temp_n>n) for (i=n;i<temp_n;i+)*(x+i)=0; / /开始做fft运算 for (j=1, i=1;i<32;i
11、+) m=i; j=2*j; if(j=temp_n) break; n1=temp_n-1; for (j=0, i=0;i<n1;i+) if(i<j) xt=xj; xj=xi; xi=xt; k=temp_n/2; while(k<(j+1) j=j-k; k=k/2; j=j+k; for (i=0;i<temp_n;i+=2) xt=xi; xi=xt+xi+1; xi+1=xt-xi+1; n2=1; for (k=2;k<=m;k+) n4=n2; n2=2*n4; n1=2*n2; e=float(6.283185307179596/n1); f
12、or (i=0;i<temp_n;i+=n1) xt=xi; xi=xt+xi+n2; xi+n2=xt-xi+n2; xi+n2+n4=-xi+n2+n4; a=e; for (j=1;j<=(n4-1);j+) i1=i+j; i2=i-j+n2; i3=i+j+n2; i4=i-j+n1; cc=float(cos(a); ss=float(sin(a); a=a+e; t1=cc*xi3+ss*xi4; t2=ss*xi3-cc*xi4; xi4=xi2-t2; xi3=-xi2-t2; xi2=xi1-t1; xi1=xi1+t1; *x=float(fabs(*x);
13、*(x+temp_n/2)=float(fabs(*(x+temp_n/2); for (i=1;i<temp_n/2;i+) *(x+i)=float(sqrt(*(x+i)*(*(x+i)+ (*(x+temp_n-i)*(*(x+temp_n-i); x=(float *) realloc(x, (temp_n/2)*sizeof(float); *len=temp_n/2; if(!x) free(x); return NULL; else return x; 功率信号幅值单位转换模块doubleCTools:TransformUnit(double dRecPower)doub
14、ledPower;dPower = pow(10, (dRecPower - 30) / 10);return dPower;加载波模块float* pfModData = NULL;/调制数据pfModData=(float*)malloc(m_nNumOfScan*sizeof(float);for (i = 0; i < m_nNumOfScan; i+)j = long(i*m_nNumOfBase/m_nNumOfScan);*(pfModData+i) =*(pnget+j)*dPa*cos(2*PI*m_dSimRf*i/m_dSampleFreq);/A*cos(wc*t
15、)=A*cos(2*Pi*f*t)(二) Bpsk解调模块产生高斯白噪声模块void CTools:GaussionNoise(float *noise, double pSig, double fSNR, long num_of_scan)/noise:产生的噪声数据;/stddeviation:噪声的标准差;/fSNR:信噪比;/pSig:信号功率;double pNoise, stddeviation;int i, j, numofvar;double gauvar, uDx, uEx, ranvar100, sum, tempE, tempD;double mean;/初始化变量;me
16、an=0;uEx=1.0/2.0;uDx=1.0/12.0;numofvar=20;tempE=numofvar*uEx;tempD=sqrt(numofvar*uDx);pNoise=pSig/pow(10, fSNR/10);stddeviation=sqrt(pNoise);/计算噪声标准差for (j=0;j<num_of_scan;j+)sum=0;for (i=0;i<numofvar;i+)/产生均匀分布的数据;ranvari=rand()/(1.0*RAND_MAX);sum=sum+ranvari;/生成高斯分布的数据;gauvar=(sum-tempE)/tem
17、pD;*(noise+j)=float(gauvar*stddeviation+mean); 去载波模块float* pfDemodData = NULL;/解调数据pfDemodData=(float*)malloc(m_nNumOfScan*sizeof(float);for(i=0; i<m_nNumOfScan; i+)*(pfDemodData+i)=*(pfAdd_Put+i)*cos(2*PI*m_dSimRf*i/m_dSampleFreq);低通滤波器模块void CTools:lowPassFilter(float *inData, double fln, long
18、length)longlengthh, n, i;float*h, *outData;/解决卷积分块丢失部分数据问题longlength_reivse=(int)ceil(float)length/20000)*20000;float*inData_revise=(float*)malloc(length_reivse*sizeof(float);for (i=0;i<length;i+)*(inData_revise+i)=*(inData+i);for (;i<length_reivse;i+)*(inData_revise+i)=0;lengthh=12768;n=32768
19、;h=firwin(lengthh, 1, fln, 0, 1);h=(float* )realloc(h, n*sizeof(float);outData=(float* )malloc(length_reivse*sizeof(float);for (i=lengthh;i<n;i+) hi=0.0;convold(h, lengthh, inData_revise, length_reivse, outData, n);free(h);for (i=0;i<length;i+)inDatai=outDatai;free(inData_revise);free(outData)
20、;float *CTools:firwin(int n, int band, double fln, double fhn, int wn)/n滤波器的阶数/band 滤波器类型,1-低通,2-高通, 3-带通, 4-带阻/fln, 对于低通和高通滤波器:通带边界频率,对于带通和带阻/fln:通带下边界频率,fhn:通带上边界频率/wn 窗函数类型:1-海明窗,2-汉宁窗,3-布拉克曼窗/h 一个指针,指向返回的h(n)/若失败,则返回一个空指针(NULL)int i, n2, mid;double s, wc1, wc2, delay;float *h;h=(float *) malloc(
21、n+1)*sizeof(float);if(!h) return NULL;if(n%2)=0)n2=n/2-1;mid=1;elsen2=n/2;mid=0;delay=n/2.0;wc1=2.0*PI*fln;if(band >= 3)wc2=2.0*PI*fhn;switch(band) case 1: for (i=0;i<=n2;i+) s=i-delay;*(h+i)=float(sin(wc1*s)/(PI*s)*window(wn, n+1, i);*(h+n-i)=*(h+i);if(mid=1)*(h+n/2)=float(wc1/PI);break;case
22、2: for (i=0;i <= n2;i+) s=i-delay;*(h+i)=float(sin(PI*s)-sin(wc1*s)/(PI*s);*(h+i)=*(h+i)*window(wn, n+1, i);*(h+n-i)=*(h+i);if(mid=1)*(h+n/2)=float(1.0-wc1/PI);break; case 3: for (i=0;i<=n2;i+)s=i-delay;*(h+i)=float(sin(wc2*s)-sin(wc1*s)/(PI*s);*(h+i)=*(h+i)*window(wn, n+1, i);*(h+n-i)=*(h+i);
23、if(mid=1)*(h+n/2)=float(wc2-wc1)/PI);break;case 4: for (i=0;i<=n2;i+) s=i-delay;*(h+i)=float(sin(wc1*s)+sin(PI*s)-sin(wc2*s)/(PI*s);*(h+i)=*(h+i)*window(wn, n+1, i);*(h+n-i)=*(h+i);if(mid=1)*(h+n/2)=float(wc1+PI-wc2)/PI);break;return h;判决模块/计算判决门限float xmax,xmin,xthreshold;int maxn;xmax=*pfDemodD
24、ata;/初始最大最小值xmin=*pfDemodData;i=0;while(i<m_nNumOfScan)if(*(pfDemodData+i)>xmax)xmax=*(pfDemodData+i);if(*(pfDemodData+i)<xmin)xmin=*(pfDemodData+i);i+;xthreshold=(xmax+xmin)/2;/判决门限/抽样判决float* pfDeput = NULL;/判决数据pfDeput=(float*)malloc(m_nNumOfBase*sizeof(float);m_pDemodData=(int*)malloc(m
25、_nNumOfBase*sizeof(int);maxn=(m_nNumOfScan/m_nNumOfBase/2-1);/最大判决点for (i=0; i<m_nNumOfBase; i+)*(pfDeput+i)=*(pfDemodData+m_nNumOfScan/m_nNumOfBase*i+ maxn );for (i=0; i<m_nNumOfBase; i+)if (*(pfDeput + i) >= xthreshold)*(pfDeput + i) = 0;else*(pfDeput + i) = 1;FFT模块float *CTools:fft(float
26、 *y, long n, long *len)误码率计算模块double CTools:CodeErrorRate(int *base_data, int*demod_data, long num_of_base)/两个文件的误比特率 long i, num_of_err=0;if (num_of_base>2380)for (i=0;i<2380;i+)/误码率计算if(*(base_data+i)!=*(demod_data+i)num_of_err+; elsefor (i=0;i<num_of_base;i+)/误码率计算if(*(base_data+i)!=*(de
27、mod_data+i)num_of_err+;return num_of_err/(1.0*num_of_base); (三) 输入输出模块数据输入模块void CCommSys0713Dlg:OnBnClickedStart()/ TODO: 在此添加控件通知处理程序代码/调制解调CBPSK bpsk;int i; CString s1,s2,s3,s4;UpdateData(true);s1 = m_value11.GetString();s2 = m_value12.GetString();s3 = m_value13.GetString();s4 = m_value14.GetStri
28、ng();int a1 = _tstoi(s1);int a2 = _tstoi(s2);int a3 = _tstoi(s3);int a4 = _tstoi(s4);i = bpsk.BPSK_ModDemod(a1, a2, a3, a4);MessageBox("仿真完成","温馨提示",MB_ICONASTERISK);/OnOK();数据读取模块float* CTools:getDataf(CString sFilename,long length)float* fpointer;CFileinf(sFilename,CFile:modeRe
29、ad);if (!inf) return NULL;if (length<=0)/判断长度正确与否return NULL;fpointer=(float *) malloc(length*sizeof(float);if (!fpointer)return NULL;inf.Read(fpointer,length*sizeof(float);inf.Close();return fpointer;数据输出模块void CTools:putData(float *outdata, CString out_put_filename, long length)if (!outdata)ret
30、urn;CFile outf(out_put_filename, CFile:modeCreate|CFile:modeWrite);if (!outf) return;outf.Write(outdata, length*sizeof(float);outf.Close();绘图模块:OnPaint();void ModeData:OnPaint()CPaintDC dc(this); / device context for paintingint i;int* iModData;/基带数据long nPointlength = 0;/绘制点长度CTools tTool;/工具类/* 读取
31、文件长度 */CFileinf(FILE_BASE_DATAPUT, CFile:modeRead);nPointlength=inf.GetLength()/sizeof(float);/获取文件长度inf.Close();if (nPointlength > 1000)nPointlength =1000;/*/读取文件数据iModData=tTool.getData(FILE_BASE_DATAPUT,nPointlength);/求出最大值float fmaxModData = 0; for (i = 1; i < nPointlength ; i+ )if (fmaxMo
32、dData < *(iModData+i)fmaxModData = *(iModData+i);/ / for (i = 1; i < nPointlength ; i+ )/ / / *(iModData+i) = *(iModData+i)-500;/ / /CClientDC dc(this);CRect rect;int m_Low=0;int m_High=nPointlength;if(m_High>10000)m_High=10000;/ int m_Low1=-1;/ int m_High1=1; int m_High1=fmaxModData;int m_
33、Low1=-m_High1;CString str;int m_left,m_top,m_right,m_bottom;int m_Interval=(m_High - m_Low)/10;/int m_Interval1=(m_High1 - m_Low1)/10;int m_Interval1=(m_High1 - m_Low1)/2;/修改if (m_Interval < 1) m_Interval = 1;if (m_Interval1 < 1) m_Interval1 = 1;GetClientRect(&rect);dc.Rectangle(&rect)
34、;/*m_left = rect.Width()/8;m_top = rect.top+10;m_right = rect.right-50;m_bottom = rect.bottom-30;*/m_left = rect.Width()/8;m_top = rect.top+20;m_right = rect.right-50;/m_bottom = rect.bottom/2;/修改int m_IntervalPan = (m_right - m_left)/10;if (m_IntervalPan < 1 )m_IntervalPan =1;int m_IntervalPan1
35、= ( m_bottom-m_top)/2;if (m_IntervalPan < 1 ) m_IntervalPan1 =1;/绘制数据,使用蓝色画笔CPen myPen;myPen.CreatePen(PS_SOLID,0,RGB(0,0,255);dc.SelectObject(&myPen);dc.MoveTo(m_left+m_IntervalPan/ m_Interval,m_bottom-iModData1*m_IntervalPan1/m_Interval1);/起点for(i=2;i<m_High;i+)/for(i=2;i<=m_High;i+)d
36、c.LineTo(m_left+(i+1)*m_IntervalPan/ m_Interval,m_bottom-iModDatai*m_IntervalPan1/m_Interval1);myPen.DeleteObject();free(iModData);/将画笔颜色改为黑色myPen.CreatePen(PS_SOLID,0,RGB(0,0,0);dc.SelectObject(&myPen);/绘制坐标轴/*dc.MoveTo(m_left,m_top);dc.LineTo(m_left,m_bottom);dc.LineTo(m_right+20,m_bottom);dc.
37、MoveTo(m_left,m_bottom);dc.LineTo(m_left,m_bottom+150);*/dc.MoveTo(m_left,m_top+70);/dc.LineTo(m_left,m_bottom);/dc.LineTo(m_right+40,m_bottom);dc.MoveTo(m_left,m_top+20);dc.LineTo(m_left,m_bottom);dc.LineTo(m_right+20,m_bottom);dc.MoveTo(m_left,m_bottom);dc.LineTo(m_left,m_bottom+100);/绘制X轴for(i=1;
38、i<=10;i+)/str.Format(_T("%d"),m_Min+i*m_Interval);str.Format(_T("%d"),m_Low+i*m_Interval);dc.TextOut(m_left+i*m_IntervalPan,m_bottom+3,str); /绘制Y轴str.Format(_T("%d"),m_Low1);/最低点dc.TextOut(m_left-20,m_bottom+m_IntervalPan1,str); /0点坐标str.Format(_T("%d"),0);
39、dc.TextOut(m_left-20,m_bottom,str);/最高点str.Format(_T("%d"),m_High1);dc.TextOut(m_left-20,m_bottom-m_IntervalPan1,str); /*str.Format(_T("%d"),m_Low1+2);dc.TextOut(m_left-20,m_bottom-m_IntervalPan1,str); */绘制x轴刻度for (i = m_left; i < m_right; i+=5)if (i & 1) = 0)/ 10的倍数dc.Mov
40、eTo(i + 10, m_bottom);dc.LineTo(i + 10, m_bottom+4);else/ 10的倍数dc.MoveTo(i + 10, m_bottom);dc.LineTo(i + 10, m_bottom+2);/绘制Y轴刻度for (i = m_top+30; i < m_bottom+80; i+=5)if (i & 1) = 0)/ 10的倍数dc.MoveTo(m_left,i + 10 );dc.LineTo( m_left+4,i + 10);else/ 10的倍数dc.MoveTo( m_left,i + 10);dc.LineTo(
41、m_left+2,i + 10);/ 绘制X轴箭头dc.MoveTo(m_right+15,m_bottom-5);dc.LineTo(m_right+20,m_bottom);dc.LineTo(m_right+15,m_bottom+5);/dc.TextOut(m_right+5,m_bottom-20,_T("t(10e-5s");/ 绘制Y轴箭头 dc.MoveTo(m_left-5,m_top+25);dc.LineTo(m_left,m_top+20);dc.LineTo(m_left+5,m_top+25);图形界面模块/ 用于应用程序“关于”菜单项的 CA
42、boutDlg 对话框class CAboutDlg : public CDialogpublic:CAboutDlg();/ 对话框数据enum IDD = IDD_ABOUTBOX ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected:DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDia
43、log:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()/ CCommSys0713Dlg 对话框CCommSys0713Dlg:CCommSys0713Dlg(CWnd* pParent /*=NULL*/): CDialog(CCommSys0713Dlg:IDD, pParent), m_value1(0), m_value11(_T(""), m_value12(_T(""), m_value13(_T(""), m_value
44、14(_T("")m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CCommSys0713Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT11, m_value11);DDX_Text(pDX, IDC_EDIT12, m_value12);DDX_Text(pDX, IDC_EDIT13, m_value13);DDX_Text(pDX, IDC_EDIT14, m_value14);
45、BEGIN_MESSAGE_MAP(CCommSys0713Dlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()/AFX_MSG_MAPON_BN_CLICKED(IDCANCEL, &CCommSys0713Dlg:OnBnClickedCancel)ON_BN_CLICKED(IDC_BUTTON1, &CCommSys0713Dlg:OnBnClickedButton1)ON_BN_CLICKED(IDOK, &CCommSys0713Dlg:OnBnClickedStart)ON_BN
46、_CLICKED(IDC_BUTTON4, &CCommSys0713Dlg:OnBnClickedButton4)ON_BN_CLICKED(IDC_BUTTON2, &CCommSys0713Dlg:OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON3, &CCommSys0713Dlg:OnBnClickedButton3)ON_BN_CLICKED(IDC_BUTTON6, &CCommSys0713Dlg:OnBnClickedButton6)ON_BN_CLICKED(IDC_BUTTON5, &CComm
47、Sys0713Dlg:OnBnClickedButton5)ON_BN_CLICKED(IDC_BUTTON7, &CCommSys0713Dlg:OnBnClickedButton7)ON_BN_CLICKED(IDC_BUTTON8, &CCommSys0713Dlg:OnBnClickedButton8)END_MESSAGE_MAP()/ CCommSys0713Dlg 消息处理程序BOOL CCommSys0713Dlg:OnInitDialog()CDialog:OnInitDialog();/ 将“关于.”菜单项添加到系统菜单中。/ IDM_ABOUTBOX 必须
48、在系统命令范围内。ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(
49、MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(m_hIcon, TRUE);/ 设置大图标SetIcon(m_hIcon, FALSE);/ 设置小图标/ TODO: 在此添加额外的初始化代码return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CCommSys0713Dlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lPar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多系统萎缩的临床护理
- 2025编写房屋租赁合同范文
- 《经济计量模型分析与应用》课件
- 邵阳一中联考试卷及答案
- 山西期中考试卷及答案
- 三中一模政治试卷及答案
- 2025简单商铺租赁合同样本
- 砖瓦企业生产调度与物流管理考核试卷
- 生物能源在农业领域的应用与创新考核试卷
- 网络直播平台内容创新与监管考核试卷
- 恶性心律失常的急救护理
- 风机安装与调试方案
- 肿瘤的化学治疗
- 《项目风险评估》课件
- 空腔脏器手术解析
- 2024年五年级英语下册 Unit 3 Spring Begins from March第2课时说课稿 陕旅版(三起)
- 大班剪纸教育课件
- xx小学校服价格评估方案
- 房地产销售管理制度实施细则
- 体育协会赛事组织绩效考核方案
- 陕西省2024年中考化学真题(含答案)
评论
0/150
提交评论