?? callback.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 + -