当前位置:文档之家› VC常用源码

VC常用源码

VC常用源码
VC常用源码

VC常用源码

//注意事项

===============================================>

//先执行OnInitDialog()函数,然后执行构造函数!

//98下没有新宋体

//XP下窗口高度加8

//滚动条处理方法

***************************************************************** *****

//1,设置范围

m_spscroll.SetScrollRange(0,200);

SCROLLINFO si;

si.cbSize=sizeof(SCROLLINFO);

si.nPage=100;

si.fMask=SIF_PAGE;//设置页宽

m_spscroll.SetScrollInfo(&si);

//2,处理消息,垂直滚动条加WM_VSCROLL消息,水平加WM_HSCROLL消息

void CPrintView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {

// TODO: Add your message handler code here and/or call default

if(pScrollBar->GetDlgCtrlID()==IDC_SCROLLBAR1)

{

int nCurrentPos=pScrollBar->GetScrollPos();

SCROLLINFO si;

si.fMask=SIF_PAGE;//取得页宽

pScrollBar->GetScrollInfo(&si);

switch(nSBCode)

{

case SB_THUMBTRACK://移动滑块

case SB_THUMBPOSITION:

pScrollBar->SetScrollPos(nPos);//注意,设置页宽后滚动条的pos会以max/nPage倍数减少,所以在使用时注意把pos值*(max/nPage)才能得到原值

break;

case SB_LINEUP://点向上小三角

pScrollBar->SetScrollPos(nCurrentPos-1);

break;

case SB_LINEDOWN://点向下小三角

pScrollBar->SetScrollPos(nCurrentPos+1);

break;

case SB_PAGEUP://向上一页

pScrollBar->SetScrollPos(nCurrentPos-si.nPage);

break;

case SB_PAGEDOWN://向下一页

pScrollBar->SetScrollPos(nCurrentPos+si.nPage);

break;

}

}

CDialog::OnVScroll(nSBCode, nPos, pScrollBar);

}

//锁定鼠标

***************************************************************** ***********

bool pOld;

CRect rt;

SetForegroundWindow();

SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true,&pOld,SPIF_UPDAT EINIFILE);

GetWindowRect(rt);

ClipCursor(rt);

//加到LRESULT CLockDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 会有意外的效果

//在列表字符前插入一个负数字符以修改乱码

******************************************************

int index=m_list.GetSelectionMark();//在列表字符前插入一个负数字符以修改乱码CString cs;

cs=m_list.GetItemText(index,0);

char insert_char=-87;

cs.Insert(0,insert_char);

m_list.SetItemText(index,0,cs);

//在列表中添加项目最大只能显示259个字符(不含'\0')

*************************************************

int char_length=cs.GetLength();//cs,ct为CString类对象,是要发到列表框的文本但是可能大于259字节

while(char_length>259)//如果大于259字节

{

ct=cs.Left(259);

m_list.InsertItem(0,ct);//在列表中添加项目最大只能显示259个字符(不含'\0')

cs=cs.Right(char_length-259);

char_length=cs.GetLength();

}

m_list.InsertItem(0,cs);//在列表中添加项目最大只能显示259个字符(不含'\0')

//<

================================================== ========

//设置NT窗口的透明度*******************************************

OSVERSIONINFO osv;

osv.dwOSVersionInfoSize=sizeof OSVERSIONINFO;

GetVersionEx(&osv);//取得版本信息

if(osv.dwPlatformId==VER_PLATFORM_WIN32_NT)//VER_PLATFORM_WIN32_WI NDOWS 98 Me用这个宏

{

//加入WS_EX_LAYERED扩展属性

SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,

GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);//如果多次调用下面这个函数设置,这个函数只在一个位置调用一次就行了

HINSTANCE hInst = LoadLibrary("User32.DLL");

if(hInst)

{

typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); MYFUNC fun = NULL;

//取得SetLayeredWindowAttributes函数指针

fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");

if(fun)fun(this->GetSafeHwnd(),0,

200,//0 ~ 255

2);

FreeLibrary(hInst);

}

}

//字体对话框的初始化*********************************************

LOGFONT lf;

lf.lfHeight=-35;

lf.lfCharSet=134;

lf.lfWeight=400;

lf.lfOutPrecision=3;

lf.lfClipPrecision=2;

lf.lfQuality=1;

lf.lfPitchAndFamily=2;

strcpy(lf.lfFaceName,"宋体");//以上初始化为宋体26号字

CFontDialog cf(&lf);//字体

cf.m_cf.rgbColors=textcolor;//颜色

//移动没有标题的窗口**********************************************

//1定义:

CPoint just_point;

//2

void CClockfortecherDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

just_point=point;

CDialog::OnLButtonDown(nFlags, point);

}

//3

void CClockfortecherDlg::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default WINDOWPLACEMENT wi;

GetWindowPlacement(&wi);

if(nFlags==MK_LBUTTON)

SetWindowPos(&wndTop,

wi.rcNormalPosition.left+(point.x-just_point.x),

wi.rcNormalPosition.top+(point.y-just_point.y),

0,0,SWP_NOSIZE);

CDialog::OnMouseMove(nFlags, point);

}

//线程与信号量***************************************************

//1,定义信号量句柄

HANDLE event;

//2,创建信号量

event=CreateEvent(NULL, TRUE, FALSE, NULL);

//3,创建线程,

//1)定义线程函数,格式必须如下,其中lParam为AfxBeginThread的第二个参数值,可强制转化成所需类型

UINT WorkThreadProc(LPVOID lParam)//必须是UINT XXX..XXX(LPVOID lParam) {

//代码示例WaitForSingleObject:

while(1)

{//-----------------------注意,如果线程间要求同步或互斥的时候,要在每一层循环体中加入WaitForSingleObject

WaitForSingleObject((HANDLE)lParam, INFINITE);

//WaitForSingleObject的使用方法:第一个为信号量HANDLE,是CreateEvent的返回值,第二个参数为等待的毫秒数(1/1000秒)

//第二个参数为INFINITE时则一直等待,直到调用SetEvent()设置信号量时函数返回;为数值(如1000)则函数在1秒后返回

//(即使你没调用SetEvent()设置信号量)

AfxMessageBox("fcuk");//不能用MessageBox()因为这不是在类中了...

ResetEvent((HANDLE)lParam);

/*重置信号量,以使WaitForSingleObject函数可以继续等待,否则(如果你已经调用过了SetEvent()设置了信号量)

WaitForSingleObject函数将会立刻返回

*/

}

}

//2)用AfxBeginThread创建一个WorkThreadProc的线程

AfxBeginThread(WorkThreadProc,event);

//4,在主程序需要的地方调用SetEvent()设置信号量启动线程

SetEvent(event);

//-----------或者用WaitForMultipleObjects函数

static UINT __stdcall WorkThreadProc(void* pThis);/*如果lParam参数为一个对话框的指针,想调用

这个对话框的变量或函数那么就得这样定义线程函数,

还要将WorkThreadProc改成CWait_forDlg::WorkThreadProc,

这样WorkThreadProc就成为CWait_forDlg类的函数,在这个线程里就可以调用该类的变量了,

注意得用_beginthreadex函数创建线程*/

UINT CWait_forDlg::WorkThreadProc(void * lParam)

{

CWait_forDlg *pThis=(CWait_forDlg *)lParam;

HANDLE hObjects[2];

hObjects[0] = pThis->event1;

hObjects[1]= pThis->event2;

while(1)

{

DWORD dwWait = WaitForMultipleObjects(2,hObjects,TRUE,INFINITE);

/*第一个参数为信号量个数2,第二个为指针,第三个如果为TRUE函数要等待两个信号量都被SetEvent才返回,返回值为最后一个

SetEvent的WAIT_OBJECT_0+i;而为FALSE则只要有一个被SetEvent就返回,返回值为WAIT_OBJECT_0+i 即信号量在数组中的位置

+WAIT_OBJECT_0 */

if (dwWait == WAIT_OBJECT_0)

AfxMessageBox("fcuk 1 ");

//开始ping

if (dwWait == WAIT_OBJECT_0 + 1)

AfxMessageBox("fcuk 2");

ResetEvent(hObjects[1]);

ResetEvent(hObjects[0]);

}

}

#include /* 调用_beginthread, _endthread 得包涵这个头文件*/

_beginthreadex(NULL,

0,

WorkThreadProc,

(void*) this,

0,

0);

//第三种创建线程的方法:

HANDLE thread;

DWORD threadrid; //线程ID

DWORD WINAPI sniff(LPVOID no){} //线程函数这样定义

thread=CreateThread(NULL, //安全属性

0, //栈大小

sniff, //要创建的线程名

NULL, //参数(一般为调用线程的指针)

0, //创建标志

&threadrid); //线程ID

CloseHandle(thread);

//操作数据库**************************************************

//在stdafx.h中加入

#include

//1,用类向导,建立基于CRecordset或CDaoRecordset的新子类,并选择数据源

m_setComplete

//2,添加

if ( ! m_setComplete . IsOpen () ) // if the recordset isn't already open..

m_setComplete . Open (); // open it

m_setComplete . AddNew (); // begin the add

m_setComplete . m_strCallsign = strCallsign; // change the recordset members m_setComplete . m_strFrequency = strFrequency;

m_setComplete . m_strCity = strCity;

m_setComplete . m_strState = strState;

m_setComplete . m_strInput = strInput;

m_setComplete . Update (); // complete the add by doing an update

m_setComplete . Close (); // close the recordset

//3,修改

if ( ! m_setComplete . IsOpen () ) // if the recordset isn't already open..

m_setComplete . Open (); // open it

m_setComplete . Edit (); // begin the edit

m_setComplete . m_strCallsign = strCallsign; // change the recordset members

m_setComplete . m_strFrequency = strFrequency;

m_setComplete . m_strCity = strCity;

m_setComplete . m_strState = strState;

m_setComplete . m_strInput = strInput;

m_setComplete . Update (); // complete the add by doing an update

m_setComplete . Close (); // close the recordset

//4,删除

/* 1, DAO 数据库,不是ODBC

if ( ! m_setComplete . IsOpen () )

m_setComplete . Open ();

// cycle through the selected listbox elements.

strRecordIdQuery =CString ( "[ID]=" ) +CString ( m_lcRepeaterList . GetItemText ( nItemIndex, 0 ) ); // put the ID into the query string

MessageBox(strRecordIdQuery);

if ( m_setComplete . FindFirst ( strRecordIdQuery ) ) { // looking for this ID in the database, ID is a unique 'autonumber'

m_setComplete . Delete (); // delete the record

m_setComplete . MoveFirst (); // move back to the first record

m_bRecordsWereDeleted = TRUE; // make a note that we changed the database SetDlgItemText ( IDC_DELETE_STATUS, "Repeater Deleted From Database" ); // set the status field

}

else {

// if we EVER end up here, either the database is in the crapper, or I will have screwed up horribly--been known to happen from time to time :) ...

// so let's cover our ass-ets just in case.

AfxMessageBox ( "Internal failure\n\nCannot find selected repeater in database\nor database is corrupted", MB_ICONSTOP );

}

m_setComplete . Close (); // close the database*/

// ODBC here

m_setComplete.m_strFilter="number=200301";//条件查询(where语句)

if ( ! m_setComplete . IsOpen () )

m_setComplete . Open ();

m_setComplete.Delete();

m_setComplete . MoveFirst ();

m_setComplete . Close (); // close the database

m_setComplete.m_strFilter="";//清空条件(where语句)

//查询(where语句)

m_setComplete.m_strFilter="number=200301";

if ( ! m_setComplete . IsOpen () )

m_setComplete . Open ();

m_setComplete . Close (); // close the database

//不用类向导写连接数据库的程序段,但是我只看明白了连接和查询,不会修改和添加,删除

//1,

CDatabase m_dbCust; //定义数据库类对象

m_dbCust.OpenEx(_T("DSN=MQIS;UID=sa;PWD=1980623")//打开数据库//数据源名,用户名,密码

,CDatabase::forceOdbcDialog );//此参数只定是否打开连接确认对话框

//MessageBox(m_dbCust.GetDatabaseName());取得数据源名

//m_dbCust.ExecuteSQL("select number from works");测试是否支持SQL语句CRecordset cs(&m_dbCust);//定义目录查询对象

cs.Open( CRecordset::dynaset,

_T( "select * from works" ) );//打开时执行的SQL语句

short nFields = cs.GetODBCFieldCount( );//取得字段数,(列数)

CDBVariant varValue;//定义通用数据类型

CODBCFieldInfo co;//定义字段信息

CString cc;

while( !cs.IsEOF( ) )

{

for( short index = 0; index < nFields; index++ )

{

// do something with varValue

cs.GetFieldValue(index,varValue);//取得某列的数据,

//cs.GetFieldValue(index,cc); 也可直接取得由某列的数据直接转化成的文本

if(varValue.m_dwType==DBVT_LONG)//m_dwType成员用来判断数据类型

/* m_dwType Union data member

DBVT_NULL No union member is valid for access.

DBVT_BOOL m_boolVal

DBVT_UCHAR m_chVal

DBVT_SHORT m_iVal

DBVT_LONG m_lVal

DBVT_SINGLE m_fltVal

DBVT_DOUBLE m_dblVal

DBVT_DATE m_pdate

DBVT_STRING m_pstring

DBVT_BINARY m_pbinary

*/

{

cc.Format("%d",varValue.m_lVal);//m_dwType==DBVT_LONG时为LONG型数据,

成员为m_lVal,数值在其中

MessageBox(cc);

}

cs.GetODBCFieldInfo(index,co);//取得字段信息

/* struct CODBCFieldInfo

{

CString m_strName;字段名

SWORD m_nSQLType;SQL数据类型

UDWORD m_nPrecision;

SWORD m_nScale;

SWORD m_nNullability;

};

*/

}

cs.MoveNext( );//下一个

}

cs.Close();

//显示程序段*********************************************

CString cstr;

cstr.Format("%d", );

MessageBox(cstr);

if(MessageBox("关闭Windows秘书您可会失去重要的提醒信息,确定要关闭吗?", "Windows秘书",

MB_OKCANCEL|MB_DEFBUTTON2|MB_ICONWARNING)==IDOK) MessageBeep(MB_ICONQUESTION);

//注册与卸载OCX控件****************************************

//1,函数入口宏定义

typedef HRESULT (STDAPICALLTYPE *CTLREGPROC)();

//2,注册函数

BOOL RegisterOcx(CString ocxfilename)

{

BOOL bResult = FALSE ;

HMODULE hModule = ::LoadLibrary(ocxfilename) ;

//获得注册函数地址

CTLREGPROC DLLRegisterServer =

(CTLREGPROC)::GetProcAddress(hModule,"DllRegisterServer" ) ;

if (DLLRegisterServer != NULL)

{

HRESULT regResult = DLLRegisterServer() ;

bResult = (regResult == NOERROR) ;

}

::FreeLibrary(hModule) ;

return bResult ;

}

//2,卸载函数

BOOL UnRegisterOcx(CString ocxfilename)

{

BOOL bResult = FALSE ;

HMODULE hModule = ::LoadLibrary(ocxfilename) ;

//获得卸载函数地址

CTLREGPROC DLLUnregisterServer =

(CTLREGPROC)::GetProcAddress( hModule,

"DllUnregisterServer" ) ;

if (DLLUnregisterServer != NULL)

{

HRESULT regResult = DLLUnregisterServer() ;

bResult = (regResult == NOERROR) ;

}

::FreeLibrary(hModule) ;

return bResult ;

}

//处理文件拖动

***************************************************************** **********************

//1 添加WM_DROPFILES 静态消息

//2 在OnInitDialog()函数中加入

DragAcceptFiles(TRUE);//允许拖放

//3 WM_DROPFILES 的处理函数为

void CCXatDemoDlg::OnDropFiles(HDROP hDropInfo)

{

unsigned int nFiles=DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0);//取得拖放的文件总数

for (unsigned int i=0;i

{

unsigned int nLen=DragQueryFile(hDropInfo,i,NULL,0)+1;//取得文件名长度

char *psBuffer=new char[nLen];

unsigned int sLen=DragQueryFile(hDropInfo,i,psBuffer,nLen);//取得文件名到psBuffer中,sLen为实际拷贝的字符数

//To add code here...

delete [] psBuffer;

}

DragFinish(hDropInfo);//结束

}

//设置窗口大小和位置

******************************************************

SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);//设为最高层/*

wndBottom

wndTop

wndTopMost

wndNoTopMost

*/

//在窗体中这样做HWND_NOTOPMOST 为不是最高层

::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_TOPMOST,-1,-1,-1,-1,SWP _NOMOVE|SWP_NOSIZE);

/*

HWND_BOTTOM

HWND_NOTOPMOST

HWND_TOP

HWND_TOPMOST

SWP_DRAWFRAME Draws a frame, defined in the class description of the window, around the window.

SWP_FRAMECHANGED Sends a WM_NCCALCSIZE message to the window, even if the size of the window is not being changed. If this flag is not specified,

WM_NCCALCSIZE is sent only when the size of the window is being changed. SWP_HIDEWINDOW Hides the window.

SWP_NOACTIVATE Does not activate the window. If this flag is not set, the window is activated and moved to the top of either the topmost or nontopmost group, depending on the setting of the hWndInsertAfter parameter.

SWP_NOMOVE Retains the current position and ignores the X and Y parameters. SWP_NOOWNERZORDER Does not change the position in the Z order of the owner window.

SWP_NOREPOSITION Same as the SWP_NOOWNERZORDER flag.

SWP_NOSIZE Retains the current size and ignores the cx and cy parameters. SWP_NOZORDER Retains the current Z order and ignores the hWndInsertAfter parameter.

SWP_SHOWWINDOW Displays the window.

*/

//在系统栏显示图标*****************************************

//1定义结构

NOTIFYICONDATA systemicon;

//2定义新的消息

#define WM_SYSTEMMESSAGE WM_USER+998

//3添加消息函数映射

ON_MESSAGE(WM_SYSTEMMESSAGE,OnSystemMessage)

//4初始化结构

systemicon.cbSize=sizeof(NOTIFYICONDATA);

systemicon.hWnd=this->m_hWnd;

systemicon.uID=IDI_SYSICON; //图标

systemicon.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;

systemicon.uCallbackMessage=WM_SYSTEMMESSAGE;

systemicon.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_SY SICON));

strcpy(systemicon.szTip,"Windows秘书");

Shell_NotifyIcon(NIM_ADD,&systemicon);//显示

strcpy(systemicon.szTip,cs);

Shell_NotifyIcon(NIM_MODIFY,&systemicon);//修改

Shell_NotifyIcon(NIM_DELETE,&systemicon);//删除

//处理函数

void OnSystemMessage(WPARAM wParam, LPARAM lParam)

{

if(wParam!=IDI_SYSICON)

return;

switch(lParam)

{

case WM_RBUTTONUP://右键起来时弹出快捷菜单

{

CMenu *menu=NULL;

LPPOINT mousepoint=new tagPOINT;

::GetCursorPos(mousepoint);//得到鼠标位置

BCMenu bmpmenu;

bmpmenu.LoadMenu(IDR_SYSPOPUPMENU);

menu = bmpmenu.GetSubMenu (0);//确定弹出式菜单的位置

if(IsWindowVisible())

bmpmenu.ModifyODMenuA("隐藏主窗口",ID_SHOWHIDE,IDB_HIDE);

else

bmpmenu.ModifyODMenuA("显示主窗口",ID_SHOWHIDE,IDB_SHOW);

if(findtxdata->stoplowstep==0)

bmpmenu.ModifyODMenuA("停止普通级提醒",ID_STOPALLPT,IDB_STOP);

else

bmpmenu.ModifyODMenuA("启用普通级提醒",ID_STOPALLPT,IDB_NOTSTOP);

if(topornot)

bmpmenu.ModifyODMenuA("窗体不在最上层",ID_NOTONTOP,IDB_NOTTOP);

else

bmpmenu.ModifyODMenuA("窗体在最上层",ID_NOTONTOP,IDB_TOP);

if(!muteornot)

bmpmenu.ModifyODMenuA("静音",IDMUTE,IDB_NOSOUND);

else

bmpmenu.ModifyODMenuA("取消静音",IDMUTE,IDB_SOUND); SetForegroundWindow();//必须先调用这个函数才能如果我不选择任何菜单而取消它menu->TrackPopupMenu(TPM_LEFTALIGN,mousepoint->x,mousepoint->y,this); //资源回收

//menu->Detach();

//menu->DestroyMenu();

delete mousepoint;

break;

}

}

return;

}

//浮动鼠标提示*******************************************

//1定义

CToolTipCtrl tooltip;

//2在OnCreate函数中创建

tooltip.Create(this);

//3在OnInitDialog函数中为控件添加提示字符

tooltip.AddTool(GetDlgItem(IDC_DATEANDTIME),"显示日期/时间");

tooltip.Activate(TRUE);//启动

//4在PreTranslateMessage(MSG* pMsg) 函数中加上

tooltip.RelayEvent(pMsg);

//tab控件的使用************************************************

m_tab.InsertItem(0,"提醒");

//定义结构

WINDOWPLACEMENT wininfo;

//取得窗口信息

m_tab.GetWindowPlacement(&wininfo);

//注意第一个参数要为&wndTop,如果是&wndTopMost就可能会函数功能无效

qita.SetWindowPos(&wndTop,wininfo.rcNormalPosition.left-10,wininfo.rcNormalPo sition.top+20,

0,0,SWP_NOSIZE|SWP_HIDEWINDOW);

//选择不同的标签

void OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)

{

// TODO: Add your control notification handler code here

int i=m_tab.GetCurSel();

switch(i)

{

case 0:

break;

case 1:

break;

}

*pResult = 0;

}

//注册热键****************************************************

//m_filehotkey为热键控件变量

m_filehotkey.GetHotKey(WORD virtualkey,WORD flags);

//注意要在主窗口中调用这个函数

void RegHotKey(WORD virtualkey,WORD flags,int id)

{

if(flags==1||flags==9)//从热键控件中得到的系统键与下函数的标志不同,但有一一对应的关系:

{

RegisterHotKey(GetSafeHwnd(),id,MOD_SHIFT,virtualkey);

}//每个ID只能注册一个热键,up,down,home,end等中部键盘的键的flags为

9,10,11,12,13,14,15

if(flags==2||flags==10)//其余为1,2,3,4,5,6,7

{

RegisterHotKey(GetSafeHwnd(),id,MOD_CONTROL,virtualkey);

}

if(flags==4||flags==12)

{

RegisterHotKey(GetSafeHwnd(),id,MOD_ALT,virtualkey);

}

if(flags==3||flags==11)

{

RegisterHotKey(GetSafeHwnd(),id,MOD_CONTROL|MOD_SHIFT,virtualkey);

}

if(flags==5||flags==13)

{

RegisterHotKey(GetSafeHwnd(),id,MOD_ALT|MOD_SHIFT,virtualkey);

}

if(flags==6||flags==14)

{

RegisterHotKey(GetSafeHwnd(),id,MOD_ALT|MOD_CONTROL,virtualkey);

}

if(flags==7||flags==15)

{

RegisterHotKey(GetSafeHwnd(),id,MOD_ALT|MOD_CONTROL|MOD_SHIFT,virtualk ey);

}

}

//处理消息

LRESULT CWindowsDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)

{

// TODO: Add your specialized code here and/or call the base class

switch(message)

{

case WM_HOTKEY :

switch(wParam)

{

case IDC_HOTKEY:

if(IsWindowVisible())

ShowWindow(SW_HIDE);

else

ShowWindow(SW_SHOWNORMAL);

SetForegroundWindow();

break;

case IDC_HOTKEY2:

break;

}

return 0 ;

}

return CDialog::WindowProc(message, wParam, lParam);

}

//控制系统音量

**********************************************************

//在StdAfx.h中加入宏

#include

//在setting->Link中加入下静态链接库!

winmm.lib

//播放声音文件名风格:第一个参数为文件名/找不到文件时不播放默认声音

PlaySound( "", NULL, SND_FILENAME |SND_NODEFAULT);

//定义结构

UINT m_nNumMixers; //混合器的数量

HMIXER m_hMixer; //当前混合器的句柄

MIXERCAPS m_mxcaps; //当前混合器的性能参数

CString m_strDstLineName, m_strVolumeControlName; //混合器控件的名称DWORD m_dwMinimum, m_dwMaximum; //最大,最小的音量值

DWORD m_dwVolumeControlID; //混合器控件的音量控制ID

DWORD m_dwMuteControlID; //混合器控件的静音控制ID

BOOL muteornot; //是否静音

DWORD nowvolume; //当前值

double multiple;

double difference; //最大最小差值

int volumestep;//步长

//加入消息映射函数

ON_MESSAGE(MM_MIXM_CONTROL_CHANGE, OnMixerCtrlChange)

//当系统音量改变时调用此函数

LONG OnMixerCtrlChange(UINT wParam, LONG lParam)

{

//响应控件音量改变的消息,然后获得当前音量并设置滚动条

if ((HMIXER)wParam == m_hMixer && (DWORD)lParam ==

m_dwVolumeControlID)

{

amdGetMasterVolumeValue(nowvolume);

multiple=nowvolume;

double percent;

}

if ((HMIXER)wParam == m_hMixer && (DWORD)lParam == m_dwMuteControlID) {

amdGetMasterMuteValue(muteornot);

}

return 0L;

}

//在Init函数中加入

if (amdInitialize())

{

//获得音量控制控件的ID和名称

amdGetMasterVolumeControl();

// 获得当前音量值,并设置滚动条的初始位置

amdGetMasterVolumeValue(nowvolume);

amdGetMasterMuteValue(muteornot);

multiple=nowvolume;

difference=(long)(m_dwMaximum-m_dwMinimum);

}

//函数

BOOL amdInitialize()//初始化

{

//获取当前混合设备数量

m_nNumMixers = ::mixerGetNumDevs();

m_hMixer = NULL;

::ZeroMemory(&m_mxcaps, sizeof(MIXERCAPS));

if (m_nNumMixers != 0)

{

//打开混合设备

if (::mixerOpen(&m_hMixer,

0,

(DWORD)this->GetSafeHwnd(),

NULL,

MIXER_OBJECTF_MIXER | CALLBACK_WINDOW)

!= MMSYSERR_NOERROR)

return FALSE;

// 获取混合器性能

if (::mixerGetDevCaps((UINT)m_hMixer, &m_mxcaps, sizeof(MIXERCAPS))

!= MMSYSERR_NOERROR)

return FALSE;

}

return TRUE;

}

BOOL amdGetMasterVolumeControl()//获得音量控制控件的ID和名称

{

m_strDstLineName.Empty();

m_strVolumeControlName.Empty();

if (m_hMixer == NULL)

return FALSE;

//获得混合器性能

MIXERLINE mxl;

mxl.cbStruct = sizeof(MIXERLINE);

mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;

if (::mixerGetLineInfo((HMIXEROBJ)m_hMixer,

&mxl,

MIXER_OBJECTF_HMIXER |

MIXER_GETLINEINFOF_COMPONENTTYPE)

!= MMSYSERR_NOERROR)

return FALSE;

MIXERCONTROL mxc;

MIXERLINECONTROLS mxlc;

mxlc.cbStruct = sizeof(MIXERLINECONTROLS);

mxlc.dwLineID = mxl.dwLineID;

mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;//此值表示取得音量

https://www.doczj.com/doc/a03119348.html,ontrols = 1;

mxlc.cbmxctrl = sizeof(MIXERCONTROL);

mxlc.pamxctrl = &mxc;

//获得混合器线控件

if (::mixerGetLineControls((HMIXEROBJ)m_hMixer,

&mxlc,

MIXER_OBJECTF_HMIXER |

MIXER_GETLINECONTROLSF_ONEBYTYPE)

!= MMSYSERR_NOERROR)

return FALSE;

//记录控件的信息

m_strDstLineName = mxl.szName;

m_strVolumeControlName = mxc.szName;

m_dwMinimum = mxc.Bounds.dwMinimum;

m_dwMaximum = mxc.Bounds.dwMaximum;

m_dwVolumeControlID = mxc.dwControlID;

mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;//此值表示取得静音与否

if (::mixerGetLineControls((HMIXEROBJ)m_hMixer,

&mxlc,

MIXER_OBJECTF_HMIXER |

MIXER_GETLINECONTROLSF_ONEBYTYPE)

!= MMSYSERR_NOERROR)

return FALSE;

m_dwMuteControlID = mxc.dwControlID;

return TRUE;

}

BOOL amdGetMasterVolumeValue(DWORD &dwVal)// 获得当前音量值,并设置滚动条的初始位置

{

if (m_hMixer == NULL ||

m_strDstLineName.IsEmpty() || m_strVolumeControlName.IsEmpty())

return FALSE;

MIXERCONTROLDETAILS_UNSIGNED mxcdVolume; MIXERCONTROLDETAILS mxcd;

mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);

mxcd.dwControlID = m_dwVolumeControlID;

https://www.doczj.com/doc/a03119348.html,hannels = 1;

mxcd.cMultipleItems = 0;

mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);

mxcd.paDetails = &mxcdVolume;

//获取指定混合器控件

if (::mixerGetControlDetails((HMIXEROBJ)m_hMixer,

&mxcd,

MIXER_OBJECTF_HMIXER |

MIXER_GETCONTROLDETAILSF_VALUE)

!= MMSYSERR_NOERROR)

return FALSE;

dwVal = mxcdVolume.dwValue;

return TRUE;

}

BOOL amdGetMasterMuteValue(BOOL &yorn)//是否静音

{

if (m_hMixer == NULL ||

m_strDstLineName.IsEmpty() || m_strVolumeControlName.IsEmpty()) return FALSE;

MIXERCONTROLDETAILS_UNSIGNED mxcdVolume; MIXERCONTROLDETAILS mxcd;

mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);

mxcd.dwControlID = m_dwMuteControlID;

https://www.doczj.com/doc/a03119348.html,hannels = 1;

mxcd.cMultipleItems = 0;

mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &mxcdVolume;

//获取指定混合器控件

if (::mixerGetControlDetails((HMIXEROBJ)m_hMixer,

&mxcd,

MIXER_OBJECTF_HMIXER |

MIXER_GETCONTROLDETAILSF_VALUE)

!= MMSYSERR_NOERROR)

return FALSE;

yorn = mxcdVolume.dwValue;

return TRUE;

}

BOOL amdSetMasterMuteValue(BOOL &yorn)//设置静音与否

{

if (m_hMixer == NULL ||

m_strDstLineName.IsEmpty() || m_strVolumeControlName.IsEmpty()) return FALSE;

MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = { yorn }; MIXERCONTROLDETAILS mxcd;

mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);

mxcd.dwControlID = m_dwMuteControlID;

https://www.doczj.com/doc/a03119348.html,hannels = 1;

mxcd.cMultipleItems = 0;

mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &mxcdVolume;

//放置混合器控件

if (::mixerSetControlDetails((HMIXEROBJ)m_hMixer,

&mxcd,

MIXER_OBJECTF_HMIXER |

MIXER_SETCONTROLDETAILSF_VALUE)

!= MMSYSERR_NOERROR)

return FALSE;

return TRUE;

}

BOOL amdSetMasterVolumeValue(DWORD dwVal)//设置音量

{

if (m_hMixer == NULL ||

m_strDstLineName.IsEmpty() || m_strVolumeControlName.IsEmpty())

return FALSE;

MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = { dwVal }; MIXERCONTROLDETAILS mxcd;

mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);

mxcd.dwControlID = m_dwVolumeControlID;

https://www.doczj.com/doc/a03119348.html,hannels = 1;

mxcd.cMultipleItems = 0;

mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);

mxcd.paDetails = &mxcdVolume;

//放置混合器控件

if (::mixerSetControlDetails((HMIXEROBJ)m_hMixer,

&mxcd,

MIXER_OBJECTF_HMIXER |

MIXER_SETCONTROLDETAILSF_VALUE)

!= MMSYSERR_NOERROR)

return FALSE;

return TRUE;

}

BOOL amdUninitialize()//关闭

{

BOOL bSucc = TRUE;

if (m_hMixer != NULL)

{

//关闭混合器

bSucc = ::mixerClose(m_hMixer) == MMSYSERR_NOERROR;

m_hMixer = NULL;

}

return bSucc;

}

//在OnDestroy() 中加入

amdUninitialize();

//编辑注册表*******************************************************

通达信指标公式源码 混沌操作法

VAR1:=(H+L)/2; AO:=SMA(VAR1,5,1)-SMA(VAR1,34,1),COLOR6699CC; AC:=SMA((AO-SMA(AO,5,1)),5,1),COLOR6699CC; X1:=AO>REF(AO,1) AND AC>REF(AC,1); X2:=AO

红:SMA(Y,5,1),COLORRED; 绿:SMA(Y,3,1),COLORGREEN; 上张:=蓝>=REF(蓝,1) AND 红>=REF(红,1) AND 绿>=REF(绿,1); 下张:=蓝=R2,UL,REF(UL,BARSLAST(H>R2))); 下碎:=IF(L<=R2,DL,REF(DL,BARSLAST(L<=R2))); STICKLINE(BARSLAST(ABS(上碎-REF(上碎,1)))上碎AND REF(C,1)REF(下碎,1)),下碎,下碎,3,1),COLORCYAN; LC := REF(C,4); RMI:=SMA(MAX(C-LC,0),7,1)/SMA(ABS(C-LC),7,1)*100; QS:= HHV(MA(RMI,3),13),COLOR00ADFF; RMIMA:= SMA(RMI,3,1),COLOR009C00; DRAWTEXT(C>上碎&&ISLASTBAR=1,H+0,'向上突破有效上碎型 '),COLOR0000FF; DRAWTEXT(C<下碎&&ISLASTBAR=1,L-0,'向下有效碎型被突破 '),COLORFFFF00; DRAWTEXT(X1>0&&ISLASTBAR=1,H+0.3,'AO与AC为多方趋势 '),COLORFF00FF; DRAWTEXT(X2>0&&ISLASTBAR=1,L-0.3,'AO与AC为空方趋势 '),COLOR00FF00; DRAWTEXT(上张&&ISLASTBAR=1,H+0.6,'鳄鱼向上张嘴'),COLOR999999; DRAWTEXT(下张&&ISLASTBAR=1,L-0.6,'鳄鱼向下张嘴'),COLOR999999; DRAWTEXT(上张&&X1>0&&ISLASTBAR=1,H+0.8,'怀疑中期多头 '),COLORFF00FF; DRAWTEXT(下张&&X2>0&&ISLASTBAR=1,L-0.8,'怀疑中期空头 '),COLOR00FF00; DRAWTEXT((RMI>RMIMA&&RMIRMIMA&&RMI>QS)&&ISLASTBAR=1,H+1,'坚决做多'),COLOR0000FF; DRAWTEXT((RMI20)&&ISLASTBAR=1,L-1,'坚决做空'),COLORFF0000; DRAWTEXT((RMI

鳄鱼全套指标 通达信指标公式源码

证券交易新空间》关于鳄鱼指标的源码在此。 包括鳄鱼线AO AC 指标。源码不加密。关于使用方法,最好看书《证券混沌操作法》里面说的非常详细,权威。 Y:=(HIGH+CLOSE+LOW)/3; 吻线:REF(SMA(Y,5,1),3),COLORGREEN; 齿线:REF(SMA(Y,8,1),5),COLORRED; 颚线:REF(SMA(Y,13,1),8),COLORBLUE; VAR2:=H>=REF(H,1)&&H>=REF(H,2)&&H>REFX(H,1)&&H>REFX(H,2); VAR3:=L<=REF(L,1)&&L<=REF(L,2)&&LREF(MA55,1),MA55,DRAWNULL),COLORMAGENTA; ★下降:IF(MA55REF(AO,1) AND AC>REF(AC,1); VAR5:=AO=REF(AO,1) AND AC<=REF(AC,1); VAR7:=AO<=REF(AO,1) AND AC>=REF(AC,1); STICKLINE(VAR4, H,L,0,1),COLORRED; STICKLINE(VAR4 AND C>=O,O,C,2.5,1),COLORRED; STICKLINE(VAR4 AND C=O,O,C,2.5,1),COLORGREEN; STICKLINE(VAR5 AND C

证券混沌操作法:鳄鱼线

证券混沌操作法:鳄鱼线 证券混沌操作法:鳄鱼线 证券混沌操作法是由比尔?威廉姆(Bill Williams)发展和推广的,他声称这是一套能在全球任何市场长期获取利润的交易方法。目前已有不少交易员使用这套方法在市场中进行交易。 鳄鱼线是运用分形几何学和非线性动力学的一组平均线(实际上就是一种比较特别的均线)。它分为蓝、红、绿三条。蓝线被称为鳄鱼的颚部,红线被称为鳄鱼的牙齿,绿色被称为鳄鱼的唇吻。它们的构造方法如下:颚部——13根价格线的平滑移动均线,并将数值向未来方向移动8根价格线;牙齿——8根价格线的平滑移动平均线,并将数值向未来方向移动5根价格线;唇吻——5根价格线的平滑移动均线,并将数值向未来方向移动3根价格线。 鳄鱼线的基本使用方法是当颚部、牙齿、唇吻纠缠在一起时,我们便进入了观望期(鳄鱼休息了);当唇吻在牙齿以上,牙齿在颚部以上时,我们便进入了多头市场(颚鱼要开始吃牛肉了);当唇吻在牙齿以下,牙齿在颚部以下时,我便进入了空头市场(鳄鱼要开始吃熊肉了)。简单来说鳄鱼线是交易员的指南针,它能告诉交易员市场正处于什么状态,并保证交易员能在行情中进行交易,在市场休整时离场观望。 两套鳄鱼线的源码: 用SMA编的 var1:=(H+L)/2; 下颚:SMA(VAR1,13,1),SHIFT8,COLORBLUE; 牙 齿:SMA(VAR1,8,1),SHIFT5,COLORRED; 上唇:SMA(VAR1,5,1),SHIFT3,COLORGREEN; 用EMA编的

var1:=(H+L)/2; 下颚:SMA(VAR1,13,1),SHIFT8,COLORBLUE; 牙 齿:SMA(VAR1,8,1),SHIFT5,COLORRED; 上唇:SMA(VAR1,5,1),SHIFT3,COLORGREEN;

VC中图像控件的用法与总结

使用picture控件动态显示图片方法 一控件适应于图片尺寸 添加一个picture控件,修改ID为IDC-PICTURE,并添加一CBitmap m_bmp成员变量在OnInitDialog()函数中添加如下代码 if(m_bmp.m_hObject!=NULL) m_bmp.DeleteObject(); //以绝对路径加载BMP图片 HBITMAP hbmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"1.bmp",IMAGE_BITMAP, 0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE); if(hbmp==NULL) return false; //获得加载位图的文件信息 m_bmp.Attach(hbmp); DIBSECTION ds; BITMAPINFOHEADER &bminfo=ds.dsBmih;//获得位图信息图 m_bmp.GetObject(sizeof(ds),&ds); int cx=bminfo.biWidth;//获得位图宽度 int cy=bminfo.biHeight;//获得位图高度 //该段程序根据图象的宽和高,调整控件大小,让它正好显示一张图片 CRect rect; GetDlgItem(IDC_PICTRUE)->GetWindowRect(&rect);//获得控件所在矩形区域 ScreenToClient(&rect); GetDlgItem(IDC_PICTRUE)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整控件大小在OnPaint()函数中添加如下代码 //三种方法获得pictrue控件DC,图象将被绘制在控件上 CPaintDC dc(GetDlgItem(IDC_PICTRUE)); //CPaintDC dc(this); //CDC dc; //dc.m_hDC=::GetDC(NULL); CRect rcclient; GetDlgItem(IDC_PICTRUE)->GetClientRect(&rcclient); CDC memdc; memdc.CreateCompatibleDC(&dc); CBitmap bitmap; bitmap.CreateCompatibleBitmap(&dc,rcclient.Width(),rcclient.Height()); memdc.SelectObject(&bitmap); CWnd::DefWindowProc(WM_PAINT,(WPARAM)memdc.m_hDC,0); CDC maskdc; maskdc.CreateCompatibleDC(&dc); CBitmap maskbitmap; maskbitmap.CreateBitmap(rcclient.Width(),rcclient.Height(),1,1,NULL); maskdc.SelectObject(&maskbitmap);

VC++基础控件案例图详解

一.简单MFC应用程序开发。 例1. 编写如下图的程序,若单击“复制”按钮,则把上面的编辑框中的内容复制到下面的编辑框中;若单击“结束”按钮,则退出程序的运行。 (1)工程创建 ①选择“文件|新建”命令; ②在“工程”选项卡中,选定“MFC App Wizard(exe),输入工程名称TEST,单击“确定”按钮; ③选定“D基本对话框”即创建基于对话框的应用程序,单击“完成”按钮。

(2)放置控件,先删除原有的控件,然后放置本例需要的控件,本例共涉及4个控件:2个编辑框和2个命令按钮。编辑框主要用来输入数据,也可以用来显示数据;命令按钮用来执行有关操作。

(3)设置控件的属性,控件添加后就要设置其有关的属性。 scroll和Auto VScroll,编辑框将有垂直滚动条;选定“Want Return”。

下编辑框的属性设置同上编辑框,但可不选定“Want Return”。 (4)连接变量,为控件连接变量就是为控件起一个名字。每一个控件都是一个对象,调用MFC类库中的函数都是通过对象来实现的。编辑框属于CEdit类,一个具体的编辑框就是一个CEdit类的对象,如上IDC_EDIT1和IDC_EDIT2。这些对象必须有名称才能对它们进行操作,所以要给每一个对象连接一个变量,作为对象的名称。这个变量将成为类中的一个数据成员。 现在为IDC_EDIT1连接一个变量m_e1。 ①在IDC_EDIT1编辑框中右击鼠标出现快捷菜单选择“建立类向导”,如下图所示。 ②在上图中选择“创建类向导”后,弹出如下图所示的MFC ClassWizard对话框,在“Member Variables”中,选定“IDC_EDIT1”,再选择“Add Variable”按钮。

VC6.0中控件及按钮的设置和使用资料

VC6.0中控件及按钮的设置和使用 VC学习笔记1:按钮的使能与禁止 用ClassWizard的Member Variables为按钮定义变量,如:m_Button1; 则 m_Button1.EnableWindow(true); 使按钮处于允许状态 m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示 VC学习笔记2:控件的隐藏与显示 用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。 例1: CWnd *pWnd; pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号 pWnd->ShowWindow( SW_HIDE ); //隐藏控件 例2: CWnd *pWnd; pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号 pWnd->ShowWindow( SW_SHOW ); //显示控件 以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。 VC学习笔记3:改变控件的大小和位置 用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。 void MoveWindow(int x,int y,int nWidth,int nHeight); void MoveWindow(LPCRECT lpRect); 第一种用法需给出控件新的坐标和宽度、高度; 第二种用法给出存放位置的CRect对象; 例: CWnd *pWnd; pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号 pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件 SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags); 第一个参数我不会用,一般设为NULL;

最秘密的股票操作k线波浪技巧

生命是永恒不断的创造,因为在它内部蕴含着过剩的精力,它不断流溢,越出时间和空间的界限,它不停地追求,以形形色色的自我表现的形式表现出来。 --泰戈尔 △▲ 道氏理论的基本法则 一、平均指数包含一切; 二、市场有三种趋势; 1、主要趋势(一年甚至几年); 2、次要趋势(三个星期到三个月,调整位通常为先前趋势运动的三分之一至三分之二,最常见的为百分之五十); 3、小趋势(不到三个星期,细微波动)。 三、主要趋势分为三个阶段; 1、收集阶段(经过一轮大的下跌,市场“利空”消息不断,价格开始企稳,机敏的投资者开始买入); 2、公众参与阶段(价格加速上扬,消息开始转好,大多数技术型趋势追随者开始参与); 3、派发阶段(所有报刊开始刊登看涨故事时,所有人投身市场时,机敏的投资者开始卖出)。 四、各种平均指数必须相互验证; 五、成交量必须印证趋势; 1、上升趋势中,成交量伴随上涨而增加,下跌而减少; 2、下降趋势中,成交量伴随下跌而增加,上涨而减少。 六、趋势在给出明确的反转信号之前被假定一直有效; 1、失效摆动; 高点C挑战高点A失败,随后市场跌破低点B,构成了在点S处的“卖出信号”。

2、非失效摆动。 高点C突破高点A,随后市场跌破低点B构成S1处的第一个“卖出信号”,接着市场反弹到高点E,最后跌破低点D构成S2处的第二个“卖出信号”。 注:失效摆动和非失效摆动在底部时同样有用. 证券混沌操作法:鳄鱼线 证券混沌操作法是由比尔·威廉姆(Bill Williams)发展和推广的,他声称这是一套能在全球任何市场长期获取利润的交易方法。目前已有不少交易员使用这套方法在市场中进行交易。 鳄鱼线是运用分形几何学和非线性动力学的一组平均线(实际上就是一种比较特别的均线)。它分为蓝、红、绿三条。蓝线被称为鳄鱼的颚部,红线被称为鳄鱼的牙齿,绿色被称为鳄鱼的唇吻。它们的构造方法如下:颚部——13根价格线的平滑移动均线,并将数值向未来方向移动8根价格线;牙齿——8根价格线的平滑移动平均线,并将数值向未来方向移动5根价格线;唇吻——5根价格线的平滑移动均线,并将数值向未来方向移动3根价格线。

实验名称MFC基本控件的使用

1、实验名称:MFC基本控件的使用 2、实验目的:掌握编辑框类及其方法,熟练掌握利用编辑框类开发基于MFC的应用 程序的方法。 3、实验内容:使用MFC AppWizard创建如图一所示的基于对话窗的应用程序,实现算 术加、减、乘和除运算。 图一 4、程序实现方法: (1)使用AppWizard建立应用程序框架 ①在进入Visual C++ 6.0的第一个界面下,选择MFC AppWizard(exe),在Project name 文本输入框中输入新建的项目名称“计数器”,并设置其所在位置,单击OK按钮,如图二所示。 图二Visual C++ 6.0的第一个界面 ②在MFC AppWizard的第一步中选择基本对话,如图三所示,其余的都采用默认选项。

图三MFC AppWizard的第一步界面 这样就建立了一个基于对话框的程序,如图四所示。 图四基于对话框的界面 (2)利用资源编辑器建立对话框 在图四的Resource View选项卡中打开Dialog资源组,本程序的工程文件名为计数器,因此,系统自动产生一个名为IDD_MY_DIALOG的资源文件,双击IDD_ MY_DIALOG,在右边的窗口中显示出待编辑的对话框。根据如图一所示的样式,利用Visual C++ 6.0的控键(Controls)建立对话框。 下面以“数据1”编辑框和“+”按钮为例介绍控件的创建过程,其他编辑框和按钮的创建可参照此操作: ①在图四中Controls的“编辑框”按钮上单击鼠标左键、在如图一所示的对话框编辑窗口上的“数据1”编辑框的位置上,按下鼠标左键,并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择Properties选项,此时弹出Edit Properties 属性设置对话框,如图五所示,在该对话框中输入ID属性。

证券交易新空间一书中的精华包含所有源码

△▲ 道氏理论的基本法则 一、平均指数包含一切; 二、市场有三种趋势; 1、主要趋势(一年甚至几年); 2、次要趋势(三个星期到三个月,调整位通常为先前趋势运动的三分之一至三分之二,最常见的为百分之五十); 3、小趋势(不到三个星期,细微波动)。 三、主要趋势分为三个阶段; 1、收集阶段(经过一轮大的下跌,市场“利空”消息不断,价格开始企稳,机敏的投资者开始买入); 2、公众参与阶段(价格加速上扬,消息开始转好,大多数技术型趋势追随者开始参与); 3、派发阶段(所有报刊开始刊登看涨故事时,所有人投身市场时,机敏的投资者开始卖出)。 四、各种平均指数必须相互验证; 五、成交量必须印证趋势; 1、上升趋势中,成交量伴随上涨而增加,下跌而减少; 2、下降趋势中,成交量伴随下跌而增加,上涨而减少。 六、趋势在给出明确的反转信号之前被假定一直有效; 1、失效摆动; 高点C挑战高点A失败,随后市场跌破低点B,构成了在点S处的“卖出信号”。 2、非失效摆动。

高点C突破高点A,随后市场跌破低点B构成S1处的第一个“卖出信号”,接着市场反弹到高点E,最后跌破低点D构成S2处的第二个“卖出信号”。 注:失效摆动和非失效摆动在底部时同样有用. 证券混沌操作法:鳄鱼线 证券混沌操作法是由比尔·威廉姆(Bill Williams)发展和推广的,他声称这是一套能在全球任何市场长期获取利润的交易方法。目前已有不少交易员使用这套方法在市场中进行交易。 鳄鱼线是运用分形几何学和非线性动力学的一组平均线(实际上就是一种比较特别的均线)。它分为蓝、红、绿三条。蓝线被称为鳄鱼的颚部,红线被称为鳄鱼的牙齿,绿色被称为鳄鱼的唇吻。它们的构造方法如下:颚部——13根价格线的平滑移动均线,并将数值向未来方向移动8根价格线;牙齿——8根价格线的平滑移动平均线,并将数值向未来方向移动5根价格线;唇吻——5根价格线的平滑移动均线,并将数值向未来方向移动3根价格线。 鳄鱼线的基本使用方法是当颚部、牙齿、唇吻纠缠在一起时,我们便进入了观望期(鳄鱼休息了);当唇吻在牙齿以上,牙齿在颚部以上时,我们便进入了多头市场(颚鱼要开始吃牛肉了);当唇吻在牙齿以下,牙齿在颚部以下时,我便进入了空头市场(鳄鱼要开始吃熊肉了)。简单来说鳄鱼线是交易员的指南针,它能告诉交易员市场正处于什么状态,并保证交易员能在行情中进行交易,在市场休整时离场观望。 两套鳄鱼线的源码:

vc之控件篇

VC之控件篇 1 使用Windows标准控件 1.1 常见控件列表 Windows标准控件即普通控件,撰写此文时,笔者每天面对的Word就带了一脸的控件,当然你肯定也熟悉:字体选择下拉框、工具栏、滚动条、状态栏,如此等等。 常见的Windows标准控件在VC里就有: 图2 控件集窗口 通常这个控件集窗口在你的对话框设计界面的附近总能找到,如果找不到,在VC工具栏的任何空白处点击右键,在弹出菜单的Controls菜单项前面打上勾即可,如图所示: 图3 显示控件集窗口

你也许已经看到了,我们图1所示的FlashPlayer中有3个控件是Windows标准控件,好,我们先系统地学习一下怎么使用这3个控件。 1.2 引入控件 1. 准备对话框 对话框相当于控件的容器,我们当然要先准备一个对话框。好办,直接创建一个基于对话框的工程就是了: 图4 准备对话框Step 1 注意,在Step 2中要确认“3D Controls”和“ActiveX Controls”前面打上勾,如图所示:

图5 准备对话框Step 2 这样你的程序就支持三维控件和我们后面即将使用到的ActiveX控件了。如果去掉了勾,或者你面对的正是你师兄当年准备论文的旧的project,它好像并不支持ActiveX控件,那该怎么办呢(好多VC网友总是带着那张哭丧脸的表情问我这种问题)?没事,在主程序文件的Ini tInstance()函数头部加上以下语句即可: 查看源代码拷贝至剪贴板打印代码 1.BOOL CFlashPlayerApp::InitInstance() 2.{ 3. AfxEnableControlContainer(); 4. 5.#ifdef _AFXDLL 6. Enable3dControls(); // Call this when using MFC in a shared DLL 7.#else 8. Enable3dControlsStatic(); // Call this when linking to MFC statically 9.#endif 10. 11.//… 12.}

MFC控件使用详细教程

使用Windows标准控件 我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它窗口中充当与用户交互的元素。在Visual C++中,可以使用的控件分成三类: (1) Windows标准控件 Windows标准控件由Windows操作系统提供,在Windows 95中还提供了一些新增的控件。所有这些控件对象都是可编程的,我们可以使用Visual C++提供的对话框编辑器把它们添加到对话框中。Microsoft基础类库(MFC)提供了封装这些控件的类,它们列于表6.1。 表6.1 Windows标准控件

续表6.1 前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它也是所有控件类的基类。Windows标准控件在以下环境下提供: ?Windows 95 ?Windows NT 3.51及以后版本 ?Win32s 1.3 ?注意: ?Visual C++ 4.2及以后版本不再支持Win32s。 (2) ActiveX控件

ActiveX控件可用于对话框中,也可用于HTML文档中。这种控件过去被称为OLE 控件。本书将在专门的章节中来讲述关于ActiveX控件的知识。这里仅指出ActiveX控件使用了与标准控件完全不同的接口和实现方法。 (3) 其它MFC控件类 除了Windows标准控件和自己编写的或者来自于第三方软件开发商的ActiveX 控件以外,MFC还提供了另外三种控件,它们由下面的三个类进行封装: ?类CBitmapButton用于创建以位图作为标签的按钮,位图按钮最多可以包括四个位图图片,分别代表按钮的四种不同状态。 ?类CCheckListBox用于创建选择列表框,这种列表框中的每一项前面有一个复选框,以决定该项是否被选中。 ?类CDragListBox用于创建一种特殊的列表框,这种列表框允许用户移动列表项。 在本章我们仅讲述第一类控件,即Windows标准控件。所涉及的内容包括各个控件的使用及相应的技巧。 第一节使用对话框编辑器和ClassWizard 对于大多数Windows标准控件,我们一般都使用对话框编辑器来将它们添加到对话框中。 图6. 1 在ResourceView中选择对话框 IDD_DIALOGDEMO_DIALOG

比尔威廉姆混沌操作法的总结用法

比尔威廉姆-混沌操作法的总结用法 背离线法则入场的方式,如果趋势是顺着背离线的方向发展,那么止损点就设在最近的3根或5根竖线的最低点稍下方(上升趋势),或最近的3根或5根竖线的最高点稍上方(下降趋势),如果趋势逆着背离线的方向运行,则止损点设在反向的分形上,如果鳄鱼线张开,则出场点分三种情况,1.一般情况是收盘价收在红线以下出场,2.在暴涨暴跌的行情中,收盘价收在绿线以下就出场,3.就是AO,AC同时为连续为5根同色的时候,以第5根竖线的最高(下跌行情)或最低价格(上涨行情)突破为出场点。 点评:很多人不太理解背离线是什么,我给大家举几个学习的方式,大家可以深入学习理解,比如K线形态中,穿头破脚,或者反转K线的这种形式来理解背离线会跟容易一些,不要被新名词所误导。 5颗子弹入场方式,也是运用后面这种止损出场方式出场。背离线法则是一种快进快出的法则,适合的止损方式不同于5颗子弹法则。 鳄鱼组线就是运用分形几何学与非线性动力学的一组平衡线,蓝线,绿线,红线都可以叫做平衡线,不过我们实战中使用的平衡线就是蓝线。我们看看三条线的定义: 蓝线:13根价格线的平滑移动均线,并将数值向未来的方向移动8根价格线。 红线:8根价格线的平滑移动均线,并将数值向未来的方向移动5根价格线。 绿线:5根价格线的平滑移动均线,并将数值向未来的方向移动3根价格线。 对于蓝线来说就是当前周期里的平衡线,而红线就是次一级时间结构的平衡线,绿线就是再次一级的时间结构的平衡线,三根竖线是属于不同时间结构的平衡线,但对于实战来说我们只讲本周期的平衡线,也就是蓝线。本周期指的是我们入场时的周期。

点评:鳄鱼线其本质依然是均线,只不过数学算法比普通均线稍微复杂了一点而已。 在混沌理论实战中的入场策略之一就是背离线法则,此法则就是讲求的价格线与平衡线,也就是蓝线之间的夹角的大小来判断趋势的起始点。还有5颗子弹法则入场后的加仓信号中的平衡线加仓信号也是指的蓝线这根平衡线,如果理解成红线和绿线就会出现问题,因为那是次一级和再次一级的时间结构的平衡线。 比如我们在寻找价格线和平衡线的夹角的时候不以蓝线为基准而以红线或绿线为基准,所选择的夹角就会失准。 鳄鱼线的作用很大,总结起来有以下几种: 1.入场前的使用:观察现在所处的位置是推动浪还是调整浪,价格在鳄鱼线上下跳动就是调整浪,价格在鳄鱼线单边运行就是推动浪。 2.入场时的使用:我们可以根据价格线和鳄鱼线之间的夹角的 大小来判断现在是不是一个很好的入场点,如果夹角够大,说明价格受到平衡线的拉力就越大,那么价格运动的动力就越大。 3.入场后的使用:我们在趋势运行的过程中可以根据鳄鱼线中的平衡线的加仓法则来寻找加仓点,这也是市场风险最小的时候,也是我们获取利润的最佳时刻,我们还犹豫什么呢? 4.出场时的使用:我们在趋势快要结束的时候,可以观察价格线的收盘价格在鳄鱼线红线的位置来判断是不是该出场了。 第一本书中提到的macd(5345)与现在混沌理论运用的AO在功能上是一样的,都是用来判断趋势的结束的依据的,不过macd中有条信号线,通过信号线高于或低于macd的竖线来判断动量发生了变化,不过AO已经把竖线的高低用颜色的不同表现了出来,高于前根竖线的竖线用绿线标示,低于前根竖线的竖线用红色表示,只要观察颜色的变化就代表动量发生了变化了,而把信号线去掉了。

混沌操作法学习心得

期货交易获得财务自由 交易要有正确的地图 混沌理论:随机与刺激非线性关系非直接因果关系 左脑 右脑混沌 脑核心: 两股冲突力量界面不是混沌而是较高层次的自我组织 自然界充满菲波纳奇数列和0.618黄金分割 混沌理论提供了一种精确可预测的方法 市场能量法则:1、永远遵循阻力最小法则;2、不可见的根本结构决定阻力最小途径;3、根本结构可以被发现与改变。 推论:辨识主导交易行为的市场结构,根据交易宗旨改变结构。改变自己的结构,顺应市场结构。 不要总是试图解决问题,而是提升一个层次,在新的结构里顺应自然,超越原有的问题本身。原有问题不再那么重要时,自然会有解决的办法。

充分发挥脑部功能: 左脑:线性分析16件/秒分析、判断、拟定决策。计划功能、整体决策。培养习惯行为,解决问题。 右脑:直觉、灵感对知识的无限包容 脑核心:产生感知300万件/秒、控制体内运作、无意识控制、自动驾驶 结论:充分运用脑部的功能、用合适的功能做合适的事梦想→现实思维方式 自信、乐在其中的交易程序 核心理念:在一个无风险的市场结构中,我能够享有乐趣与利润。 无风险:盘后分析制订操作策略,纳入最坏预期,设定安全气囊,从而随后的交易中所有情况都在预料之中。所谓无风险,并非无亏损,而是心理上的无风险状态。 市场结构:根据波浪时空结构,提前确定好止损、加仓、反转、离场的位置与仓位。机会出现进才交易,没有机会决不交易。 自由操作:在确信市场结构的基础上,享受交易的乐趣

与利润。交易过程中,不是用左脑去拼斗(左脑已在风险控制和市场结构环节发挥了功能),而是发挥右脑潜能,在脑核心协调下,享受交易的乐趣与利润。 总结论:洞悉市场结构→调整自身结构与市场结构共振(获得一致性体验)→确定交易策略→在交易过程中以最小阻力自由滑行,享受交易的乐趣。

VC++MFC控件知识点

1按钮控件 1.1如何使用按钮控件 方法是双击编辑对话框按钮图标,之后就进入了这个按钮单击的处理函数,在这里,你可以添加按钮单击后要做的事是什么. 1.2如何让按钮显示图标样式 首先进入ResourceView里,然后右击Icon选择插入,之后选择你要的图标,假设这个图标的ID名为IDI_ICON2,那么下一步,就是进入对话类中的OnPaint()函数,并在else里面添加如下语句: m_Quit.SetIcon(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2))); 注:m_Quit为要显示图标按钮的关联类; 还要说明的是,必须把按钮属性样式里把图标的构给打上才行,要不然是无法显示图标的。 1.3如何让按钮显示文本信息 先要在对话框添加一个CToolTipCtrl类的对象,如:CToolTipCtrl m_ToolTip; 然后在OnInitDialog添加以下语句: m_ToolTip.Create(this); m_ToolTip.AddTool(&m_Confirm,”文本信息”);//m_Confirm为要显示文本按钮关联的类对象然后在类视图窗口中右击对话框类,在弹出的菜单中选择Add Virtual Funtion,然后再双击PreTranslateMessage;添加右边窗口中去,这样便增加了一个方法,在此方法中添加以下语句m_ToolTip.RelayEvent(pMsg);既可;

2.1如何使用复选框控件 复选框控件是有一个X的图标,比如是三个复选框吧,首先各为三个复选框关联一个控件类,比如是m_Vip,m_Manager,m_Commoner;那么调用m_Vip.GetCheck();返回的是一个整数,如果返回值等于BST_CHECKED;那么此类关联的复选框控件就被选中了。如果要获取此类关联控件的文本信息就用m_Vip.GetWindowText(Modal);其中Modal是一个CString类的对象,跟Edit是差不多的,存储有信息。

MFC各种控件属性介绍

MFC各种控件属性介绍 VC++6.0控件工具箱: 2 图形控件(picture):常用于显示位图(Bitmap)和图标(Icon) 3 静态文本(Static Text):用来在指定的位置显示特定的字符串,一般用来标识附近另一个控件的内容。显示在静态文本控件中的字符串一般不再改变,但是在需要的时候,也可以通过调用相应的函数来进行设置。MFC提供了CStatic类支持静态控件。 4 编辑框(Edit Box):用来接收用户输入的字符串。通过选择编辑框的选项,编辑框可以接收字符串、数字、密码等;编辑框还可以设置成接收多行字符串的模式;可以自动进行大小写转换。编辑框可能向其父窗口发送多种控件通知,如果用户需要,可以对这些控件通知进行处理。MFC提供了CEdit类支持编辑框控件。

5 组成框(Group Box):用来包围具有逻辑关系的一组控件,在这些控件的周围加上边界和标题。需注意的是,组成框仅仅是在视觉效果上对控件进行“成组”,真正的“成组”工作还需要另外一些工作。 6 按钮(Button):用来接收用户的命令,应用程序在接收到用户命令后,通常需要进行一些后台工作。按钮可以响应单击或双击动作,在按钮接收到鼠标动作后,向其父窗口发送相应的控件通知,用户可以对这些控件通知进行消息映射,从而进行相应的处理。在一个对话框中,可以定义一个默认按钮,这只要选中按钮属性中的“Default”选项。如果在对话框活动的时候按下了Enter键,则等同于单击了默认按钮。MFC提供了CButton类支持按钮控件。 7 复选框(Check Box):用来显示某种可能的选择,该项选择是独立的,用户可以选中或取消该选项。在选项被选中的时候核选标记出现,选项被取消时核选标记消失。MFC中由CButton类对核选框进行支持,用户可以通过SetCheck()函数和GetCheck()函数设置或获取核选框当前的状态。 8 单选按钮(Radio Button):用来选择某种可能的选择,与核选框不同,该选项不是独立的。一般是几个单选按钮组成一组,同组中的单选按钮可以有也只能有一个按钮被选中。MFC同样使用CButton类对单选按钮控件进行支持,SetCheck()函数和GetCheck()函数对单选按钮也是适用的。 9 组合框(Combo Box):列表框和编辑框的组合,用户除了可以在列表中对已经存在的选项进行选择外,还可以输入新的选择。MFC提供了CComboBox类对组合框控件进行支持。

混沌操作法II——第一智者MT4源码

混沌操作法——第一智者MT4源码https://www.doczj.com/doc/a03119348.html,/s/blog_62f6a62b0100gmc8.html //+------------------------------------------------------------------+ //| BW-wiseMan-1.mq4 | //| Copyright ? 2005, wellx | //| https://www.doczj.com/doc/a03119348.html, | //+------------------------------------------------------------------+ #property copyright "Copyright ? 2005, wellx" #property link "https://www.doczj.com/doc/a03119348.html," #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_color2 OrangeRed extern int updown=5; extern int back=2; //---- buffers double BWWM1Up[]; double BWWM1Down[]; int pos=0; int i=0; bool contup=true,contdown=true; //+-----------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,140); SetIndexBuffer(0,BWWM1Up); SetIndexEmptyValue(0,0.0);

MFC常用控件用法

MFC 常用整理 MFC USUAL TRIM 艾德温*范克里夫 学生所在学院:信息科学与工程学院 学生所在班级:软件2班 学生姓名:王海波 学生学号:110120010061 指导教师:王海波 教务处 2014年 7 月

目录 MFC 常用知识 第一回:整体感知 第二回: MFC是什么 第三回:开始用MFC创建窗体以及MFC的结构第四回: VS2010界面组织 MFC 常用控件写法 常用控件介绍 常用控件使用 按钮的使用 编辑框的使用 选项卡的使用 报表的使用

MFC 常用知识 第一回: 想写一个像上图(大二写的的吧。。囧)的窗体程序,我们就可以用简单的MFC.怎么用MFC做出上图的窗体? 1 如下图用vs2010的可视化工具栏拖控件,很简单

2 然后双击某个按钮,vs2010会自动弹出函数,我们就可以在函数中填写代码。之后,每当你按那个按钮一次,你在函数中写的代码就会执行一次。 3 显然这一点功能远远不够,更多请看下回。

第二回: 回顾:第一回讲的就是一个窗体初级的原型。接下来说说更深一点的东西。 MFC 是什么?(上面的窗体等是哪里来的?) 定义:MFC: Microsoft function class (微软功能类) 理解:MFC 就是许许多多的类。 跟我们有什么联系:我们利用MFC中的许多类作为工具来开发出窗体。 更浅显的理解:MFC就是工具,让我们能快速开发的工具。之前穆云峰老师的windows编程课记着么,最开始窗体就是那么一句句代码手动写出来的,特繁琐,所以微软就写了功能封装类,把一些重复的工作写成类,之后写窗体就更方便了。 第三回: 一:开始用MFC 写窗体 1 2

混沌操作法

混沌操作法的突破系统 混沌操作法的两大系统。 一套是混沌操作法的高抛低吸系统,扑捉市场趋势底部的起点的买入和高位终点的卖出。(五颗神奇子弹) 另一套是混沌操作法的突破系统,当新的大趋势形成了突破关键点买入,随后有一段爆炸大行情。 混沌操作法的突破系统 优点: 1.是最赚钱的系统,掌握了这个系统操作,当大趋势产生时,可以获得巨大的赚钱利润。 2.可以把握市场最好的时机,市场大部分的时间趋势不是很直接,都是些小趋势,最好的时机,是少数时间的大趋势大机会。

难点: 1.它的成功率不高,只有30%的成功率。 2.突破点买入时机很难把握,要很好耐心守候。 比尔讲的这套系统只是: 1.分形是混沌的进场系统,也是鳄鱼醒来的第一信号。 2.不是所有的信号都获利,在“低租金的区域”停损,再停损。损失相对获利而言是小的。 比尔对这套系统没有讲透(好多人都用不好,分形第一次突破买入,停损。分形第二次再突破再买入,再停损。第三次就不敢买入,心态以坏。股票大涨--)

我对这套系统总结: 第一,中期走势图(周k线图)有没有买点。趋势指标AO买入信号。趋向指标DMI是否是有趋势ADX>25。 第二,短期走势图(日k线图)分形突破进场,也是鳄鱼醒来的第一信号。趋向指标DMI是否是有趋势ADX>25。 第三,成交量要明显的放大。(配合其他振荡指标观察) 以上总结的多周期共振,提高买入时机。多指标共振买入,提高成功率。 附件 日.jpg(157.87 KB) 2007-12-18 20:37

周.jpg(139.32 KB) 2007-12-18 20:37

混沌操作法的突破系统 混沌操作法的两大系统。

VC++控件 VC++TAB控件使用 VC6.0Tab control

在对话框中加入属性页 作者:黄晨量 下载本文全部源代码 当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置。本文针对这种方法来讨论几种可能实现的方案。 方案一 本方案的例子请见源代码打包文件中的Property1部分 在对话框上放置一个Tab Control的控件,再在对话框上放置所需的控件(本例放置了2个按钮,试图在每个标签中显示一个)。然后利用Class Wizard来为Tab Control控件创建一个控件变量,该变量是CTabCtrl类的,再为其他控件也创建相应的控件类。在主对话框的初始函数中CProperty1Dlg::OnInitDialog()加入如下代码: //本例插入两个标签,实际运用中可通过循环插入所需个数的标签,运行后默认第一个标签被选中 m_tab.InsertItem( 0, _T("Tab1") ); m_tab.InsertItem( 1, _T("Tab2") ); //将不是第一个标签的控件隐藏掉,只留下你要的控件 m_button2.ShowWindow( SW_HIDE ); 再利用ClassWizard处理Tab Control的TCN_SELCHANGE 的消息。在消息处理函数中,利用CWnd::ShowWindow来使相应的控件显示和隐藏。 void CProperty1Dlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) { //GetCurSel返回当前被选中的标签的索引号(以0为基础算起) int sel = m_tab.GetCurSel(); switch(sel) { case 0: m_button1.ShowWindow( SW_SHOW ); m_button2.ShowWindow( SW_HIDE ); break; case 1: m_button2.ShowWindow( SW_SHOW );

相关主题
文本预览
相关文档 最新文档