⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callback.c

📁 用MINIGUI编写的窗口代码
💻 C
字号:
#include "callback.h"
#include "window.h"
#include "ID.h"#include "Form2.h"#include "trend.h"

static char *List[]={"MiniGui","简体中文","搜狗拼音","腾讯公司","嵌入式"};

//增加一个控件,以及该控件的回调函数PROC,这个为该控件的回调函数名。
static void CtrlAdd(const char *  spClassName,  
  const char *  spCaption,  
  DWORD  dwStyle,  
  DWORD  dwExStyle,  
  int  id,  
  int  x,  
  int  y,  
  int  w,  
  int  h,  
  HWND  hParentWnd,  
  DWORD  dwAddData,
  NOTIFPROC PROC
)
{
	HWND hwnd;
	hwnd=CreateWindowEx(spClassName,spCaption,dwStyle,dwExStyle,id,x,y,w,h,hParentWnd,dwAddData);
	SetNotificationCallback (hwnd,PROC);
}


//按钮的回调函数,一定要按照这个格式,要不然会报错。
//BOOL DispFlag=TRUE;
static void BUTN1_Cliked(HWND hWnd, int id, int nc, DWORD add_data)
{/************调用myWinEntries()函数来建立复杂的对话框***********/	char name[50];	char *newname=name;		myWINENTRY entries[]={		{"图线名称:",&newname,0,0},		{NULL,NULL,0,0}	};	myWINBUTTON buttons[]={		{"确认",IDOK,BS_DEFPUSHBUTTON},		{"取消",IDCANCEL,0},		{NULL,0,0}	};		int result;	sprintf(name,"%s","chen");	result=myWinEntries(GetParent(hWnd),"更改图线名称","更改图线名称:",240,150,FALSE,entries,buttons);		strcpy(name,newname);//通过newname返回输入框中的东东	free(newname);	if(result==IDOK)	{		SendMessage(GetDlgItem(GetParent(hWnd),IDC_LIST),LB_DELETESTRING,GetWindowAdditionalData(GetDlgItem(GetParent(hWnd),IDC_BUTN1)),0);//删除该条目		SendMessage(GetDlgItem(GetParent(hWnd),IDC_LIST),LB_INSERTSTRING,GetWindowAdditionalData(GetDlgItem(GetParent(hWnd),IDC_BUTN1)),(LPARAM)(name));//在指定INDEX处添加条目	}/************调用myWinEntries()函数来建立复杂的对话框***********/	
/*	
	HDC hdc;

	hdc = GetClientDC(GetParent(hWnd));
	SetTextColor(hdc,COLOR_blue);

	if(DispFlag)
	{
		TextOut(hdc,125,50,"Hello World!");
		DispFlag = FALSE;
	} else
	{
		TextOut(hdc,125,50,"世界,你好!");
		DispFlag = TRUE;
	}

//   MoveTo (hdc, 0, 10);
//   LineTo (hdc, 0, 10);
//	SetPixel(hdc,0,10,COLOR_red);//画一个像素点
//	SetPenColor(hdc,COLOR_blue);
//	Rectangle(hdc,10,10,310,170);
//	PolyLineTo(hdc,SINPOINT,200);

	ReleaseDC(hdc);
*/
}

/*********BUTN2回调函数,根据通知码nc判断单击、双击等操作然后写函数***********/
static void BUTN2_Cliked(HWND hWnd, int id, int nc, DWORD add_data)
{	Form2_Create(GetParent(hWnd));
}

/*********BUTN3回调函数,根据通知码nc判断单击、双击等操作然后写函数***********/
static void BUTN3_Cliked(HWND hWnd, int id, int nc, DWORD add_data)
{	int ListBoxIndex=0;	char Temp[]="已被定义为本底数据";	char Bendi[1024];	ListBoxIndex=SendMessage(GetDlgItem(GetParent(hWnd),IDC_LIST),LB_GETCURSEL,0,0);	SendDlgItemMessage(GetParent(hWnd),IDC_LIST,LB_GETTEXT,ListBoxIndex,(LPARAM)Bendi);	strcat(Bendi,Temp);	strcat(Bendi,"\n");
	MessageBox(GetParent(hWnd),Bendi,"定义本地数据",MB_OK);

	List_Close(GetParent(hWnd));//删除趋势窗口
}

/*********BUTN4回调函数,根据通知码nc判断单击、双击等操作然后写函数***********/
static void BUTN4_Cliked(HWND hWnd, int id, int nc, DWORD add_data)
{	int ListBoxIndex=0;	int result=IDOK;	char Temp[512];	char Del_Lines[1024]="是否删除选定数据:";	ListBoxIndex=SendMessage(GetDlgItem(GetParent(hWnd),IDC_LIST),LB_GETCURSEL,0,0);	SendDlgItemMessage(GetParent(hWnd),IDC_LIST,LB_GETTEXT,ListBoxIndex,(LPARAM)Temp);	strcat(Del_Lines,Temp);	strcat(Del_Lines,"\n");		
	result=MessageBox(GetParent(hWnd),Del_Lines,"删除数据",MB_YESNO);	if(result==IDYES)	{		SendMessage(GetDlgItem(GetParent(hWnd),IDC_LIST),LB_DELETESTRING,ListBoxIndex,0);	}
}

/*********BUTN5回调函数,根据通知码nc判断单击、双击等操作然后写函数***********/
static void BUTN5_Cliked(HWND hWnd, int id, int nc, DWORD add_data)
{	List_Create(GetParent(hWnd));
}/*********ListBox1回调函数,根据通知码nc判断单击、双击等操作然后写函数***********/static void ListBox1Cliked(HWND hWnd, int id, int nc, DWORD add_data){	DWORD SelectIndex;	switch(nc)	{		case LBN_CLICKED:			SelectIndex=SendMessage(hWnd,LB_GETCURSEL,0,0);			SetWindowAdditionalData(GetDlgItem(GetParent(hWnd),IDC_BUTN1),SelectIndex);			break;	}}

//自定义的初始化窗口函数,在MSG_CREATE处理中调用,当然你可以把下面代码直接方到MSG_CREATE消息处理下面。但是代码可读性就不是很好了
//放在回调函数之后,这样就不用声明了。
static int InitWindow(HWND hWnd)
{
	int i=0;
//	HDC hdc;
    
	/************************画出五个按钮,代表不同的功能,函数另写***********************/   
	CtrlAdd("BUTTON","更改图线名称",WS_CHILD|WS_VISIBLE|LBS_NOTIFY,0,IDC_BUTN1,8,264,105,25,hWnd,0,BUTN1_Cliked);//建立一个标题为“OK”的按钮,函数:OKProc
	CtrlAdd("BUTTON","更改图线注释",WS_CHILD|WS_VISIBLE|LBS_NOTIFY,0,IDC_BUTN2,8,296,105,25,hWnd,0,BUTN2_Cliked);
	CtrlAdd("BUTTON","定义本底数据",WS_CHILD|WS_VISIBLE|LBS_NOTIFY,0,IDC_BUTN3,8,328,105,25,hWnd,0,BUTN3_Cliked);
	CtrlAdd("BUTTON","删除当前图线",WS_CHILD|WS_VISIBLE|LBS_NOTIFY,0,IDC_BUTN4,8,360,105,25,hWnd,0,BUTN4_Cliked);
	CtrlAdd("BUTTON","确认定标数据",WS_CHILD|WS_VISIBLE|LBS_NOTIFY,0,IDC_BUTN5,8,392,105,25,hWnd,0,BUTN5_Cliked);

	/************************画出列表框,填写曲线名称***********************/
	CtrlAdd(CTRL_LISTBOX,"",WS_VISIBLE|WS_VSCROLL|WS_BORDER|LBS_NOTIFY,0,IDC_LIST,1,1,120,256,hWnd,0,ListBox1Cliked);
	for(i=0;i<5;i++)
	{
		SendMessage(GetDlgItem(hWnd,IDC_LIST),LB_ADDSTRING,0,(LPARAM)(List[i]));
	}	SendMessage(GetDlgItem(hWnd,IDC_LIST),LB_SETCURSEL,0,0);

	/********************************画出绘图区域***********************************/
/*	hdc=GetClientDC(hWnd);
	Rectangle(hdc,144,8,217+144,139);
	Rectangle(hdc,400,8,225+400,139);
	Rectangle(hdc,144,168,481+144,233+168);
	Rectangle(hdc,128,1,632,420);
	ReleaseDC(hdc);*/
    return 0;
}

int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
   HDC hdc;

    switch (message) {
        case MSG_CREATE:   
			InitWindow(hWnd);//此处只需要写上这个函数即可,避免了大量的建立控件函数的堆积
//			Form2_Create(hWnd);
            break;
        case MSG_PAINT:
        //当绘制窗口时该消息产生,您可以添加些绘图函数,我们“Hello world ”就是在这里实现			hdc=GetClientDC(hWnd);
			Rectangle(hdc,144,8,217+144,139);
			Rectangle(hdc,400,8,225+400,139);
			Rectangle(hdc,144,168,481+144,233+168);
			Rectangle(hdc,128,1,632,420);
			ReleaseDC(hdc);			break;

//            return 0;

        case MSG_CLOSE://当窗口关闭时该消息产生
            DestroyMainWindow (hWnd);//注销窗口
            PostQuitMessage (hWnd);
            return 0;
	}

    return DefaultMainWinProc(hWnd, message, wParam, lParam);//未处理的函数在此默认处理
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -