?? minigui.txt
字號:
/*****************************************************************************************
** 實驗程之曲線動態顯示
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: qx.C
**創 建 人:
**最后修改日期: 2006年2月9日
**描 述: 一個簡單的畫曲線程序,用于對采集的數據進行圖形方式顯示
********************************************************************************************************/
#include <stdio.h>
#include <string.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>//控件的頭文件
#include <pthread.h> //線程頭文件
//----------------------------網絡頭文件--------------------
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netdb.h>
#include <netinet/in.h>
//********************************控件定義及消息定義 ***********************************************************
#define IDC_STATIC 100
#define IDC_SELEL 110
#define IDC_STAT 120 //標簽框的ID
#define IDC_EDIT 160 //刷新標簽框的ID
#define IDC_STAT1 121
#define MSG_MY1 (MSG_USER+1) //自定義 加一消息
#define MSG_MY2 (MSG_USER+2) //自定義 減一消息
//********************************控制過程參數定義 *************************************************************
#define TIME_CAIJI 200 //采集時間2秒
#define TIME_SHUAXIN 200 //刷新顯示時間2秒
#define TIME_BAOCUN 400 //保存數據時間間隔
#define QUXIANSHU 4 //曲線數量
#define LIANJIEDIANSHU 20 //構成曲線的點數
#define WIDTH 100 //曲線屏的寬度
#define HEIGHT 60 //曲線屏的高度
#define XINHAO_MAICHONG 1 //信號類型為脈沖
#define XINHAO_MONI_1_5V 2 //信號類型為模擬0-5V
#define XINHAO_MONI_0_5V 3 //信號類型為模擬1-5V
#define XINHAO_MONI_0_3V 4 //信號類型為模擬0-3V
#define XINHAO_SHUZI 5 //信號類型為數字信號
//--------------------------------------------網絡端口定義-----------------------------
#define RECEIVER_PORT 40 //指定接收端口
#define SENDER_PORT 41 //指定發送端口
#define BACKLOG 100
#define BUFSIZE 100
#define MAXSELECT 100
#define MAXSIZE 80
//------------------------------------------------------------------------
#define BUFFER_SIZE 400
//************************************定義類型*******************************************************************
typedef struct huaxian_type{ //定義曲線函數參數類型
float Max[QUXIANSHU];
float Min[QUXIANSHU];
float LeiJi[QUXIANSHU][LIANJIEDIANSHU];
int dian;
HDC XC_hdc;
}HUAXIAN, *PHUAXIAN;
//------------
typedef struct miniInit_type{ //初始化函數參數類型
HWND hStaticP[8];
HWND hStaticT[8];
HWND hStaticS[8];
HWND hStaticM[8];
HWND hEditP[8];
HWND hEditT[8];
HWND hEditS[8];
HWND hEditM[8];
char * mingcheng[32]; //標簽名
BITMAP bmp_TX; //圖象
BITMAP bmp_WB;
} MINIINIT, *PMINIINIT;
//----------------
typedef struct Maxmin{ //初始化函數參數類型
float Max[32];
float Min[32];
} MAXMIN, *PMAXMIN;
//--------------------------------------- //線程共享數據區結構
struct prodcons { //定義結構類型
char * buffer[BUFFER_SIZE]; /* 緩沖區 */
pthread_mutex_t lock; /* 互斥量 */
int readpos, writepos; /* 讀寫指針 */
pthread_cond_t notempty; /* 信號不空條件 */
pthread_cond_t notfull; /* 信號不滿條件*/
};
//*************************************定義全局變量***************************************************************
static float XinHaoMax[QUXIANSHU]; //信號上限
static float XinHaoMin[QUXIANSHU]; //信號下限
static float ShunShi[QUXIANSHU][LIANJIEDIANSHU]; //瞬時量
static float Leiji[QUXIANSHU][LIANJIEDIANSHU]; //累積量
static float YuanShiLeiji[QUXIANSHU][LIANJIEDIANSHU]; //原始累積量
static LOGFONT *logfontgb12; //定義字體用于顯示中文
static int jishu; //計數用
static char ji[1]; //控件顯示計數值用
char *oooo="中國人"; //字符串
int Xs_Fs; //顯示方式
pthread_t th_a; //定義線程
//---------------------------
int client[MAXSELECT];
int sockfd,con_fd,sock,unmbytes,ret,maxfd,maxi,i,nready,len;
fd_set allset,rset;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
char recvs[MAXSIZE];
char * buf;
struct hostent *hp;
struct prodcons buffer; //定義變量為新定義的類型共享數據區
//創建監聽套接字
//------------------------------------
//*************************************定義全局函數***************************************************************
static PMINIINIT InitMiniQX(HWND hwnd); //程序初始化
static void huaxian(PHUAXIAN pHuanXian); //內存中畫曲線
static void BaoCun(void); //參數保存
static void Show(PMINIINIT Xianshi,int panduan); //控件是否顯示
static PMAXMIN CanShu(PMAXMIN zuizhi,int fls); //參數保存和提取
static void * producer(void * data); //線程處理函數
static void init(struct prodcons * b); //線程初始化
static void put(struct prodcons * b, char * data); //往共享數據區寫數據
static char * get(struct prodcons * b);
//********************************************************************************************************************
static void my_notif1_proc (HWND hwnd, int id, int nc, DWORD add_data)//加1按紐的回調函數
{
if ( nc == BN_CLICKED)
{
/* jishu++;
ji[0]=jishu;
SetWindowText(GetDlgItem(GetParent(hwnd),IDC_STAT),ji);*/
}
}
static void my_notif2_proc (HWND hwnd, int id, int nc, DWORD add_data)
{
if ( nc == BN_CLICKED)
{
/*jishu--;
ji[0]=jishu;
SetWindowText(GetDlgItem(GetParent(hwnd),IDC_STAT),ji); */
}
}
/*
************************************************************************************************************************
**函數原型 : static int ZYHWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
**參數說明 :
**返回 值 :
**創 建 人: 趙悅輝
**最后修改日期: 2006年2月9日
**描 述: 主窗體的回調函數
************************************************************************************************************************
*/
static int ZYHWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
HUAXIAN HuaXian; //曲線顯示傳遞參數
PMAXMIN Zui_Zi;
int i;
static BITMAP bmp;
HDC hdc,Neihdc;//界面hdc和內存hdc
static MINIINIT Kongjian;
static PMINIINIT pKongjian=NULL; //初始化參數和返回值
//圖象
static MAXMIN maxmin;
switch (message) {
case MSG_INITDIALOG:
logfontgb12=CreateLogFont(NULL,"song","GB2312",FONT_WEIGHT_REGULAR,FONT_SLANT_ROMAN,\
FONT_SETWIDTH_NORMAL,FONT_SPACING_CHARCELL,FONT_UNDERLINE_NONE,FONT_STRUCKOUT_NONE,12,0);
SetWindowFont(hWnd,logfontgb12);
return 1;
case MSG_CREATE:
Xs_Fs=0;
pKongjian=InitMiniQX(hWnd); //初始化
//--------------------------------更新數據----------------------------------------------------
Kongjian.bmp_TX=pKongjian->bmp_TX;
Kongjian.bmp_WB=pKongjian->bmp_WB;
for(i=0;i<8;i++)
{
Kongjian.hStaticP[i]=pKongjian->hStaticP[i];
Kongjian.hStaticT[i]=pKongjian->hStaticT[i];
Kongjian.hStaticS[i]=pKongjian->hStaticS[i];
Kongjian.hStaticM[i]=pKongjian->hStaticM[i];
Kongjian.hEditP[i]=pKongjian->hEditP[i];
Kongjian.hEditT[i]=pKongjian->hEditT[i];
Kongjian.hEditS[i]=pKongjian->hEditS[i];
Kongjian.hEditM[i]=pKongjian->hEditM[i];
}
//------------------------------------------------------------------------------------------------------
//Zui_Zi=CanShu(Zui_Zi,0); //讀取參數
SetTimer (hWnd, 100, TIME_SHUAXIN); //定時器2秒 ID是100
Show(&Kongjian,0); //確定是否顯示控件
Show(&Kongjian,1);
SendMessage(hWnd,MSG_PAINT,0,0); //刷新畫面
return 0;
case MSG_PAINT://更新界面
hdc = BeginPaint (hWnd);
if(Xs_Fs==1)
{
FillBoxWithBitmap (hdc, 0, 0, 640,480, &(Kongjian.bmp_TX)); //圖象方式顯示
//Rectangle(hdc, 0, 0, 640, 480);
}
else
{
FillBoxWithBitmap (hdc, 0, 0, 640, 480, &(Kongjian.bmp_WB)); //文本方式顯示
//Rectangle(hdc, 0, 0, 640, 480);
}
EndPaint (hWnd, hdc);
return 0;
case MSG_MY1: //接收加一消息
return 0;
case MSG_MY2: //接收減一消息
return 0;
case MSG_CHAR:
if(wParam=='a') //a控制切換顯示內容
{
if(Xs_Fs==1)
{ Xs_Fs=0;}
else
{Xs_Fs=1;}
SendMessage(hWnd,MSG_PAINT,0,0); //刷新畫面
Show(&Kongjian,Xs_Fs); //確定是否顯示控件
}
if(wParam=='b') //b停止線程
{
int *retval;
if(pthread_cancel(th_a)==0) {
if (pthread_join(th_a,(void **)(&retval))!=0) {
return (-1);
}
else
printf("producer stopped!\n");
}
}
return 0;
case MSG_TIMER:
if (wParam == 100) //ID是100
{
//時間到,讀取公共緩沖區的數據
char * d;
d = get(&buffer);
SetWindowText(Kongjian.hEditT[0],d);
printf("sssss %s\n",d);
if(Xs_Fs==1) //曲線顯示方式
{
HDC X_hdc=GetClientDC(hWnd);
//------------------------------------
for(i=0;i<20;i++)HuaXian.LeiJi[0][i]=10;
HuaXian.XC_hdc= X_hdc;
HuaXian.Max[0]=12;
huaxian(&HuaXian); //畫曲線函數
//--------------------------------
ReleaseDC(X_hdc);
}
else
{
Show(&Kongjian,Xs_Fs); //文本送數
}
}
return 0;
case MSG_CLOSE:
KillTimer (hWnd,100);
DestroyLogFont(logfontgb12);
UnloadBitmap (&(Kongjian.bmp_TX));
UnloadBitmap (&(Kongjian.bmp_WB));
DestroyMainWindow (hWnd);
PostQuitMessage (hWnd);
return 0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -