15,979
社区成员
发帖
与我相关
我的任务
分享
这个不懂 [quote=引用 4 楼 zhao4zhong1 的回复:] http://www.autohotkey.com
[quote=引用 18 楼 u010312274 的回复:] [quote=引用 15 楼 qq_36088602 的回复:] 我用的是win32 还有就是隔断时间自己点这个保存的button控件 每次保存的是空白 哎 头痛 估计是其他代码没有截取到图片信息
[quote=引用 15 楼 qq_36088602 的回复:]
我用的是win32 还有就是隔断时间自己点这个保存的button控件 每次保存的是空白 哎 头痛 估计是其他代码没有截取到图片信息
void * CMFCApplication1Dlg::ReadFile( LPCTSTR szFileName, DWORD dwShare /*= FILE_SHARE_READ*/ )
{
this->UnMap () ;
m_hFile = ::CreateFile (szFileName, GENERIC_READ, dwShare, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) ;
if (m_hFile == INVALID_HANDLE_VALUE)
return NULL ;
m_hFileMap = ::CreateFileMapping (m_hFile, NULL, PAGE_READONLY, 0, 0, NULL) ;
if (m_hFileMap == NULL)
{
::CloseHandle (m_hFile) ;
m_hFile = INVALID_HANDLE_VALUE ;
return NULL ;
}
m_pMapAddress = ::MapViewOfFile (m_hFileMap, FILE_MAP_READ, 0, 0, 0) ;
if (m_pMapAddress == NULL)
this->UnMap () ;
return (void *)m_pMapAddress ;
}
我是这样的做的 求大家 帮帮忙 拜托了我用的是win32 还有就是隔断时间自己点这个保存的button控件 每次保存的是空白 哎 头痛 估计是其他代码没有截取到图片信息
// 存档数据文件头
typedef struct tagPACKAGEFILEHEADER2 {
WORD pfType; // 文件标识:"SP"(0x5053)(PhotoScan)"XR"(0x5258)
WORD pfOffBytes; // 到纯数据的偏移量:<12*2>Bytes(即文件头的大小)
WORD pfCompress;
WORD pfWidth; // 图像宽度
WORD pfHeight; // 图像高度
WORD pfEnergy;
WORD pfStandValue;
WORD pfVersion; //版本号
DWORD pfHLEDataRowGap; // 数据间隔列数
DWORD pfHLEDataBytes; //数据量字节数(不包含文件头)
WORD pfBytesPixel; //单个像素点所包含的字节数
WORD pfSaveFlag; //保存文件的标记:0为正常,1为有插入图像,2为可疑物标记图像
char pfBogusFileName[24]; //被注入的图像文件名
SIZE pfBogusSize; //被注入的图像的宽度高度
POINT pfBogusPoint;
DWORD pfChannelID;
UINT64 pfVideoTime;
DWORD pfUserID;
DWORD pfOEMID;
DWORD pfEquipID;
WORD pfFileCurrent; //当前文件标号,而前一个文件标号为pfFileCurrent-1
WORD pfFileAfter; //后一个文件标号,如果为0,表示没有下一个文件
DWORD pfReserved1; // 预留字1
DWORD pfReserved2; // 预留字2
DWORD pfReserved3; // 预留字3
DWORD pfReserved4; // 预留字4
} PACKAGEFILEHEADER2, *PPACKAGEFILEHEADER2;
VOID * m_pMapAddress
_finddata_t fileDir;
char* dir="D:\\xraydata\\*.*";
long lfDir;
int i=0,j=0;
if((lfDir = _findfirst(dir,&fileDir))==-1l)
printf("No file is found\n");
else{
do{
if(strcmp(fileDir.name,".")==0 || strcmp(fileDir.name,"..")==0)
continue;
m_strSearchFileName1[i++]=fileDir.name;
}while( _findnext( lfDir, &fileDir ) == 0 );
}
CString Name = m_strSearchFileName1[j++];
Name=Name.Left(Name.GetLength()-1);
g_pDataFile->ReadDataFile(Name, XF_DUALE);
//g_pDataFile->SetReadEvent(0, 1024, g_initinfo.bGraphLE, m_hWin);
OnBtnBmpSaveB()
BOOL CPageFileView::OnBtnBmpSaveB()
{
OPENFILENAME ofn; // common dialog box structure
char szFile[260] = "at20080001\0"; // buffer for file name
//Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = m_hWin;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "*.bmp\0";
ofn.nFilterIndex = 0;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = "D:\\savebmp\0";
ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;
//创建文件夹 g_cntBmpFilePath[20] =
WIN32_FIND_DATA FindFileData;
HANDLE hFindFile = FindFirstFile(g_savePath, &FindFileData);
if(hFindFile == INVALID_HANDLE_VALUE
|| FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
{
CreateDirectory(g_savePath, NULL);
}
sprintf(szFile, "%s.bmp", szFile);
g_pDib->SaveBmpFile(szFile);
char * source = "./at20080001.bmp";//源文件
char destination[200];
sprintf(destination,"D:\\SaveZklsBmp\\Zkls%d.bmp",i++);
CString stdid;
stdid.Format("%d",i);
WritePrivateProfileString(cnt_countSec,cnt_countVale,stdid,cnt_ConfigFile);
CopyFile(source, destination, FALSE);//false代表覆盖,true不覆盖
DeleteFile(source);
//InvalidateRect(GetDlgItem(m_hWin, IDC_STA_GRAPHREVIEW), NULL, FALSE);
return TRUE;
}
void * FCMemMapFile::ReadFile (LPCTSTR szFileName, DWORD dwShare)
{
this->UnMap () ;
m_hFile = ::CreateFile (szFileName, GENERIC_READ, dwShare, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) ;
if (m_hFile == INVALID_HANDLE_VALUE)
return NULL ;
m_hFileMap = ::CreateFileMapping (m_hFile, NULL, PAGE_READONLY, 0, 0, NULL) ;
if (m_hFileMap == NULL)
{
::CloseHandle (m_hFile) ;
m_hFile = INVALID_HANDLE_VALUE ;
return NULL ;
}
m_pMapAddress = ::MapViewOfFile (m_hFileMap, FILE_MAP_READ, 0, 0, 0) ;
if (m_pMapAddress == NULL)
this->UnMap () ;
return (void *)m_pMapAddress ;
}
// 读取数据文件
BOOL CFileXData::ReadDataFile(LPCTSTR szFileName)
{
InitReadBuf();
assert(m_dwReadBufSize > 0);
CloseReadFile();
if(ReadFile(szFileName) != NULL)
{
memcpy(m_pReadHeader, m_pMapAddress, sizeof(PACKAGEFILEHEADER2));
if(m_pReadHeader->pfType == 0x5053 || m_pReadHeader->pfType == 0x5258)
{
m_dwReadDataSize = m_pReadHeader->pfHLEDataBytes / m_pReadHeader->pfBytesPixel;
DWORD dwMove = min(m_dwReadDataSize, m_dwReadBufSize);//防止溢出
memcpy(m_pDataRead, (LPBYTE)m_pMapAddress + m_pReadHeader->pfOffBytes, dwMove << 1);
m_dwReadShowedSize = 0;//尚未有数据显示
UnMap();
m_bOpenFile = TRUE;
return TRUE;
}
else
{//格式不对
CloseReadFile();
}
}
return FALSE;
}
保存文件:[quote=引用 6 楼 qq_36088602 的回复:] 您好 ,可以给一个例子吗 谢谢
#define WM_CALLBTN WM_USER + 10
afx_msg void OnMyBtnCall(WPARAM , LPARAM );
ON_MESSAGE(WM_CALLBTN, OnMyBtnCall)
然后在初始化函数中调用PostMessage发送消息给自己
// TODO: Add extra initialization here
PostMessage(WM_CALLBTN);
消息处理函数和按钮函数作参考:
void CCallButtonDlg::OnMyBtnCall(WPARAM wPara, LPARAM lPara)
{
Sleep(500); // 此处可调整间隔时间
OnButton1();
return;
}
void CCallButtonDlg::OnButton1()
{
// TODO: Add your control notification handler code here
static int i=0; // 通过静态变量显示OnButton1调用的次数
i++;
CString str;
str.Format("%d",i);
int rst = MessageBox(str,"MyDlg",MB_OKCANCEL|MB_ICONQUESTION );
if(rst == IDOK)
{
PostMessage(WM_CALLBTN); // 如果按了确定按钮就继续发消息
// 如果只想调用一次OnButton1函数,就将此句注销
}
return;
}
[/quote]
我用的是win32 还有就是隔断时间自己点这个保存的button控件 每次保存的是空白 哎 头痛 估计是其他代码没有截取到图片信息SetTimer(),响应WM_TIMER消息,直接调用功能函数就行 想要保留button动画效果就sendmessage模拟点击吧
可不可以这样!比如假设你手动点击按钮,那么按钮会给主窗口的窗口处理程序发送WM_COMMAND消息,通知窗口我按下了哪个按键。 这样,你用窗口子类的技巧,自定义一个该按钮的窗口处理程序,在里面新建一个定时器,定时向父窗口发送WM_COMMAND消息。 sendmessage ( GetParent(hwnd), WM_COMMAND, ( BN_CLICKED << 16 | Button_ID), Button_Hwnd);
您好 ,可以给一个例子吗 谢谢
#define WM_CALLBTN WM_USER + 10
afx_msg void OnMyBtnCall(WPARAM , LPARAM );
ON_MESSAGE(WM_CALLBTN, OnMyBtnCall)
// TODO: Add extra initialization here
PostMessage(WM_CALLBTN);
void CCallButtonDlg::OnMyBtnCall(WPARAM wPara, LPARAM lPara)
{
Sleep(500); // 此处可调整间隔时间
OnButton1();
return;
}
void CCallButtonDlg::OnButton1()
{
// TODO: Add your control notification handler code here
static int i=0; // 通过静态变量显示OnButton1调用的次数
i++;
CString str;
str.Format("%d",i);
int rst = MessageBox(str,"MyDlg",MB_OKCANCEL|MB_ICONQUESTION );
if(rst == IDOK)
{
PostMessage(WM_CALLBTN); // 如果按了确定按钮就继续发消息
// 如果只想调用一次OnButton1函数,就将此句注销
}
return;
}
这个不懂 http://www.autohotkey.com
[quote=引用 22 楼 qq_36088602 的回复:] 自动只能以绝对路径 比如"d:\\bmp\hasjdhjahsda" 这样只能保存一张图片 如果这个目录下还有另外文件 不能继续保存下一张 ,全部都是空白
自动只能以绝对路径 比如"d:\\bmp\hasjdhjahsda" 这样只能保存一张图片 如果这个目录下还有另外文件 不能继续保存下一张 ,全部都是空白
[quote=引用 20 楼 qq_36088602 的回复:] [quote=引用 18 楼 u010312274 的回复:] [quote=引用 15 楼 qq_36088602 的回复:] 我用的是win32 还有就是隔断时间自己点这个保存的button控件 每次保存的是空白 哎 头痛 估计是其他代码没有截取到图片信息