воскресенье, 16 ноября 2008 г.
четверг, 27 марта 2008 г.
Начало нового проекта.
Думаю в скором будущем появиться новая программа, относительно новая, хочу сделать нечто похожее на терминал кпк или ремотадмин, чтобы можно было управлять с кпк большим братом.
Суть идеи состоит в том чтобы можно было управлять мышкой и клавой с маленького брата, большим.
На экран кпк приходит картинка экрана с монитора, плюс эту картинку можно маштабировать. Очень удобно смотреть фильмы, только со звуком еще пока не знаю как поступить.
Все это дело будет приходить через tcp/ip протокол, так что можно будет подключиться по вафле и юзать, еще будет удобно рисовать стилусом, так как мышкой рисовать не очень удобно.
Часть этой идеи мне подкинул мой друг Вахрушев Илья, так что спасибо тебе Илюха.
Выкладываю обработку Сокетов, все очень просто, разрабатывал на Lazarus`е:
unit TSock;
{$mode DELPHI}{$H+}
interface
uses
Classes, SysUtils, WinSock, Windows;
type
{ TSockServer }
TSockServer = class // Класс сокет сервера
WSADat : WSAData;
Sock,Client : TSocket;
private
public
ClientS: String;
function InitSock(Port:integer):integer;
function RecvData(Buf:pointer;Len:integer):integer;
function SendData(Buf:pointer;Len:integer):integer;
procedure CloseSock;
end;
{ TSockClient }
TSockClient = class
WSADat : WSAData;
Sock : TSocket;
private
public
ServerS: String;
function InitSock(IP:String;Port:integer):integer;
function RecvData(Buf:pointer;Len:integer):integer;
function SendData(Buf:pointer;Len:integer):integer;
procedure CloseSock;
end;
implementation
{ TSockServer }
function TSockServer.InitSock(Port: integer):integer;
var
sin : sockaddr_in;
begin
WSAStartup($0202,WSADat);
sin.sin_family := AF_INET;
sin.sin_addr.s_addr := INADDR_ANY;
sin.sin_port := htons(Port);
Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
bind(Sock, sin, sizeof(sin));
result:=listen(Sock, SOMAXCONN);
Client := accept(Sock, @sin, 0);
ClientS:=inet_ntoa(sin.sin_addr);
end;
function TSockServer.RecvData(Buf:pointer;Len:integer):integer;
begin
result:=recv(Client, Buf, len, 0);
end;
function TSockServer.SendData(Buf: pointer; Len: integer):integer;
begin
result:=send(Client, buf, len, 0);
end;
procedure TSockServer.CloseSock;
begin
closesocket(Sock);
closesocket(Client);
WSACleanup();
end;
{ TSockClient }
function TSockClient.InitSock(IP:String;Port: integer):integer;
var
sin : sockaddr_in;
begin
WSAStartup($0202,WSADat);
sin.sin_family := AF_INET;
sin.sin_addr.s_addr := inet_addr(PChar(IP));
sin.sin_port := htons(Port);
Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
result:=connect(Sock, sin, sizeof(sin));
ServerS:=inet_ntoa(sin.sin_addr);
end;
function TSockClient.RecvData(Buf: pointer; Len: integer): integer;
begin
result:=recv(Sock, Buf, len, 0);
end;
function TSockClient.SendData(Buf: pointer; Len: integer): integer;
begin
result:=send(Sock, Buf, len, 0);
end;
procedure TSockClient.CloseSock;
begin
closesocket(Sock);
WSACleanup();
end;
end.
Ну и исходники программ чата сервер и клиент.
http://dump.ru/files/o/o38666823/
Суть идеи состоит в том чтобы можно было управлять мышкой и клавой с маленького брата, большим.
На экран кпк приходит картинка экрана с монитора, плюс эту картинку можно маштабировать. Очень удобно смотреть фильмы, только со звуком еще пока не знаю как поступить.
Все это дело будет приходить через tcp/ip протокол, так что можно будет подключиться по вафле и юзать, еще будет удобно рисовать стилусом, так как мышкой рисовать не очень удобно.
Часть этой идеи мне подкинул мой друг Вахрушев Илья, так что спасибо тебе Илюха.
Выкладываю обработку Сокетов, все очень просто, разрабатывал на Lazarus`е:
unit TSock;
{$mode DELPHI}{$H+}
interface
uses
Classes, SysUtils, WinSock, Windows;
type
{ TSockServer }
TSockServer = class // Класс сокет сервера
WSADat : WSAData;
Sock,Client : TSocket;
private
public
ClientS: String;
function InitSock(Port:integer):integer;
function RecvData(Buf:pointer;Len:integer):integer;
function SendData(Buf:pointer;Len:integer):integer;
procedure CloseSock;
end;
{ TSockClient }
TSockClient = class
WSADat : WSAData;
Sock : TSocket;
private
public
ServerS: String;
function InitSock(IP:String;Port:integer):integer;
function RecvData(Buf:pointer;Len:integer):integer;
function SendData(Buf:pointer;Len:integer):integer;
procedure CloseSock;
end;
implementation
{ TSockServer }
function TSockServer.InitSock(Port: integer):integer;
var
sin : sockaddr_in;
begin
WSAStartup($0202,WSADat);
sin.sin_family := AF_INET;
sin.sin_addr.s_addr := INADDR_ANY;
sin.sin_port := htons(Port);
Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
bind(Sock, sin, sizeof(sin));
result:=listen(Sock, SOMAXCONN);
Client := accept(Sock, @sin, 0);
ClientS:=inet_ntoa(sin.sin_addr);
end;
function TSockServer.RecvData(Buf:pointer;Len:integer):integer;
begin
result:=recv(Client, Buf, len, 0);
end;
function TSockServer.SendData(Buf: pointer; Len: integer):integer;
begin
result:=send(Client, buf, len, 0);
end;
procedure TSockServer.CloseSock;
begin
closesocket(Sock);
closesocket(Client);
WSACleanup();
end;
{ TSockClient }
function TSockClient.InitSock(IP:String;Port: integer):integer;
var
sin : sockaddr_in;
begin
WSAStartup($0202,WSADat);
sin.sin_family := AF_INET;
sin.sin_addr.s_addr := inet_addr(PChar(IP));
sin.sin_port := htons(Port);
Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
result:=connect(Sock, sin, sizeof(sin));
ServerS:=inet_ntoa(sin.sin_addr);
end;
function TSockClient.RecvData(Buf: pointer; Len: integer): integer;
begin
result:=recv(Sock, Buf, len, 0);
end;
function TSockClient.SendData(Buf: pointer; Len: integer): integer;
begin
result:=send(Sock, Buf, len, 0);
end;
procedure TSockClient.CloseSock;
begin
closesocket(Sock);
WSACleanup();
end;
end.
Ну и исходники программ чата сервер и клиент.
http://dump.ru/files/o/o38666823/
понедельник, 3 марта 2008 г.
YConvert src
Вот я наконец и вышел с праздников наверно.
Исходники на YConvert, не знаю почему, но кнопки смещаються относитьльно
панелей, короче смотрите исходники.
http://ifolder.ru/5596563
Исходники на YConvert, не знаю почему, но кнопки смещаються относитьльно
панелей, короче смотрите исходники.
http://ifolder.ru/5596563
понедельник, 18 февраля 2008 г.
YConvert
Программа сделанная на Lazarus.
Выведенны кнопки для удобной печати без клавиатуры.
Качать:
http://dump.ru/files/o/o98593977/
Выведенны кнопки для удобной печати без клавиатуры.
Качать:
http://dump.ru/files/o/o98593977/
понедельник, 11 февраля 2008 г.
Исходники к проекту VOAManager
Чу чуть криво но вроде все работает:
http://dump.ru/files/o/o920184640/ качать весь проект отсюда.
Создаем проект, но галочку на пустой не ставим.
Выйдет много файлов.
Добавляем файлы FormFunc.cpp и FormFunc.h
В них
FormFunc.cpp
#pragma once
#include "stdafx.h"
#include windows.h
#include "FormFunc.h"
struct FileCFG{int nled,
len,
ondown,
onsip,
keyon;}; // структура для файла конфигурации
int CreateWin(CREATESTRUCT* pCreateStruct) // упращаем вывод на экран
{
LPCWSTR StaticS[6] = {L"Num Led:",L"Length:",L"On Down:",L"On Sip:",L"Key On:",L"Add Config:"}; // строки для статического текста
LPCWSTR EditS[6] = {L"1",L"50",L"1",L"1",L"0",L""}; // строки для едитов
for (int i=0;i<6;i++)>hInstance, NULL)) return 1; // создаем в цикле статики
if (!CreateWindow(L"edit", EditS[i], WS_BORDER|WS_CHILD|WS_VISIBLE,
10, (40*i)+23, 90, 18, hWndF,
HMENU(IDC_MyEDIT+i),
pCreateStruct->hInstance, NULL)) return 1; // создаем в цикле едиты
}
return 0;
}
int LoadCFG()
{
WCHAR szPath[MAX_PATH];
GetModuleFileName(g_hInst,szPath,MAX_PATH);
(*((wcsrchr(szPath,'\\'))+1))=0;
StringCchCat(szPath,MAX_PATH,L"\\VOAManager.cfg");
HANDLE hFile = CreateFile(szPath,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(!hFile) return 1;
FileCFG CFG;
DWORD dwBytesRead;
if(!ReadFile(hFile,&CFG,sizeof FileCFG,&dwBytesRead,NULL))
{
CloseHandle(hFile);
return GetLastError();
}
CloseHandle(hFile);
wchar_t* s = new wchar_t[255];
_itow(CFG.nled,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+0,WM_SETTEXT,0,(LPARAM)s);
_itow(CFG.len,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+1,WM_SETTEXT,0,(LPARAM)s);
_itow(CFG.ondown,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+2,WM_SETTEXT,0,(LPARAM)s);
_itow(CFG.onsip,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+3,WM_SETTEXT,0,(LPARAM)s);
_itow(CFG.keyon,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+4,WM_SETTEXT,0,(LPARAM)s);
delete s;
return 0;
}
int SaveCFG()
{
wchar_t* s = new wchar_t[255];
SendDlgItemMessage(hWndF,IDC_MyEDIT+0,WM_GETTEXT,255,(LPARAM)s);
int nl = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+1,WM_GETTEXT,255,(LPARAM)s);
int len = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+2,WM_GETTEXT,255,(LPARAM)s);
int od = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+3,WM_GETTEXT,255,(LPARAM)s);
int os = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+4,WM_GETTEXT,255,(LPARAM)s);
int ko = _wtoi(s);
delete s;
WCHAR szPath[MAX_PATH];
GetModuleFileName(g_hInst,szPath,MAX_PATH);
(*((wcsrchr(szPath,'\\'))+1))=0;
StringCchCat(szPath,MAX_PATH,L"\\VOAManager.cfg");
HANDLE hFile = CreateFile(szPath,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(!hFile) return 1;
FileCFG CFG;
DWORD dwBytesWrite;
CFG.keyon=ko;
CFG.len=len;
CFG.nled=nl;
CFG.ondown=od;
CFG.onsip=os;
if(!WriteFile(hFile,&CFG,sizeof FileCFG,&dwBytesWrite,NULL))
{
CloseHandle(hFile);
return GetLastError();
}
CloseHandle(hFile);
return 0;
}
int RunVOA()
{
HWND hWindow;
PROCESS_INFORMATION pi;
WCHAR szPath[MAX_PATH];
GetModuleFileName(g_hInst,szPath,MAX_PATH);
(*((wcsrchr(szPath,'\\'))+1))=0;
StringCchCat(szPath,MAX_PATH,L"\\VOA.exe");
// получаем путь и добавляем к пути файл ВОА
hWindow = FindWindow(L"VOA", 0);
// у меня не работает так как вибрации у меня нет и файл VOA не запускаеться
if (hWindow)
{
CreateProcess(szPath, L"", NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi);
}
// находим VOA если он запущен запускаем его чтобы он выгрузился (задумка автора VOA )
if(!hWindow) //проверяем на всякий пожарный запущен ли он если нет
{
wchar_t* s = new wchar_t[10];
wchar_t* SS = new wchar_t[255];
SendDlgItemMessage(hWndF,IDC_MyEDIT+0,WM_GETTEXT,255,(LPARAM)s);
int nled = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+1,WM_GETTEXT,255,(LPARAM)s);
int len = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+2,WM_GETTEXT,255,(LPARAM)s);
int ondown = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+3,WM_GETTEXT,255,(LPARAM)s);
int onsip = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+4,WM_GETTEXT,255,(LPARAM)s);
int keyon = _wtoi(s); // смысол такой получаем все с едитов и добавляем в одну стр
SS[0]=0;
_itow(nled,s,10);
StringCchCat(SS,255,L" -nled ");
StringCchCat(SS,255,s);
_itow(len,s,10);
StringCchCat(SS,255,L" -len ");
StringCchCat(SS,255,s);
_itow(ondown,s,10);
StringCchCat(SS,255,L" -ondown ");
StringCchCat(SS,255,s);
_itow(onsip,s,10);
StringCchCat(SS,255,L" -onsip ");
StringCchCat(SS,255,s);
_itow(keyon,s,10);
StringCchCat(SS,255,L" -keyon ");
StringCchCat(SS,255,s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+5,WM_GETTEXT,255,(LPARAM)s);
StringCchCat(SS,255,L" ");
StringCchCat(SS,255,s);
delete(s);
if(!CreateProcess(szPath, SS, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi))
{ // вот здесь запускаем фал с командной строкой.
return 1;
}
}
return 0;
}
FormFunc.h
#define IDC_MySTATIC 10000
#define IDC_MyEDIT 20000
extern HINSTANCE g_hInst;
extern HWND hWndF;
extern int CreateWin(CREATESTRUCT* pCreateStruct);
extern int LoadCFG();
extern int SaveCFG();
extern int RunVOA();
VOAManager.cpp
// VOAManager.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "VOAManager.h"
#include "FormFunc.h"
#define MAX_LOADSTRING 100
// Global Variables:
HINSTANCE g_hInst; // current instance
HWND g_hWndMenuBar; // menu bar handle
HWND hWndF;
// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE, LPTSTR);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
// Perform application initialization:
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}
HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_VOAMANAGER));
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_VOAMANAGER));
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass;
return RegisterClass(&wc);
}
//
// FUNCTION: InitInstance(HINSTANCE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
TCHAR szTitle[MAX_LOADSTRING]; // title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // main window class name
g_hInst = hInstance; // Store instance handle in our global variable
#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
// SHInitExtraControls should be called once during your application's initialization to initialize any
// of the device specific controls such as CAPEDIT and SIPPREF.
SHInitExtraControls();
#endif // WIN32_PLATFORM_PSPC || WIN32_PLATFORM_WFSP
HWND hWnd;
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_VOAMANAGER, szWindowClass, MAX_LOADSTRING);
#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
//If it is already running, then focus on the window, and exit
hWnd = FindWindow(szWindowClass, szTitle);
if (hWnd)
{
// set focus to foremost child window
// The "| 0x00000001" is used to bring any owned windows to the foreground and
// activate them.
SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
return 0;
}
#endif // WIN32_PLATFORM_PSPC || WIN32_PLATFORM_WFSP
if (!MyRegisterClass(hInstance, szWindowClass))
{
return FALSE;
}
hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
#ifdef WIN32_PLATFORM_PSPC
// When the main window is created using CW_USEDEFAULT the height of the menubar (if one
// is created is not taken into account). So we resize the window after creating it
// if a menubar is present
if (g_hWndMenuBar)
{
RECT rc;
RECT rcMenuBar;
GetWindowRect(hWnd, &rc);
GetWindowRect(g_hWndMenuBar, &rcMenuBar);
rc.bottom -= (rcMenuBar.bottom - rcMenuBar.top);
MoveWindow(hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE);
}
#endif // WIN32_PLATFORM_PSPC
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//
// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static SHACTIVATEINFO s_sai;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case ID_MENU_LOAD:
if (LoadCFG()>0){MessageBox(hWndF,L"Config not load.",L"Error",0);};
break;
case ID_MENU_SAVE:
if (SaveCFG()>0){MessageBox(hWndF,L"Config not saved.",L"Error",0);};
break;
case ID_EXIT:
SendMessage (hWnd, WM_CLOSE, 0, 0);
break;
case IDM_HELP_ABOUT:
DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
break;
#ifdef WIN32_PLATFORM_PSPC
case IDM_OK:
{
if (SaveCFG()>0){MessageBox(hWndF,L"Config not saved.",L"Error",0);};
if (RunVOA()>0){MessageBox(hWndF,L"Not run 'VOA.EXE'",L"Error",0);};
SendMessage (hWnd, WM_CLOSE, 0, 0);
break;
}
#endif // WIN32_PLATFORM_PSPC
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CREATE:
#ifdef SHELL_AYGSHELL
hWndF = hWnd;
CreateWin((LPCREATESTRUCT)lParam);
LoadCFG();
SHMENUBARINFO mbi;
memset(&mbi, 0, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = hWnd;
mbi.nToolBarId = IDR_MENU;
mbi.hInstRes = g_hInst;
if (!SHCreateMenuBar(&mbi))
{
g_hWndMenuBar = NULL;
}
else
{
g_hWndMenuBar = mbi.hwndMB;
}
// Initialize the shell activate info structure
memset(&s_sai, 0, sizeof (s_sai));
s_sai.cbSize = sizeof (s_sai);
#endif // SHELL_AYGSHELL
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
#ifdef SHELL_AYGSHELL
CommandBar_Destroy(g_hWndMenuBar);
#endif // SHELL_AYGSHELL
PostQuitMessage(0);
break;
case WM_ACTIVATE:
// Notify shell of our activate message
SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
break;
case WM_SETTINGCHANGE:
SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
#ifdef SHELL_AYGSHELL
{
// Create a Done button and size it.
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
}
#endif // SHELL_AYGSHELL
return (INT_PTR)TRUE;
case WM_COMMAND:
#ifdef SHELL_AYGSHELL
if (LOWORD(wParam) == IDOK)
#endif
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
case WM_CLOSE:
EndDialog(hDlg, message);
return (INT_PTR)TRUE;
}
return (INT_PTR)FALSE;
}
http://dump.ru/files/o/o920184640/ качать весь проект отсюда.
Создаем проект, но галочку на пустой не ставим.
Выйдет много файлов.
Добавляем файлы FormFunc.cpp и FormFunc.h
В них
FormFunc.cpp
#pragma once
#include "stdafx.h"
#include windows.h
#include "FormFunc.h"
struct FileCFG{int nled,
len,
ondown,
onsip,
keyon;}; // структура для файла конфигурации
int CreateWin(CREATESTRUCT* pCreateStruct) // упращаем вывод на экран
{
LPCWSTR StaticS[6] = {L"Num Led:",L"Length:",L"On Down:",L"On Sip:",L"Key On:",L"Add Config:"}; // строки для статического текста
LPCWSTR EditS[6] = {L"1",L"50",L"1",L"1",L"0",L""}; // строки для едитов
for (int i=0;i<6;i++)>hInstance, NULL)) return 1; // создаем в цикле статики
if (!CreateWindow(L"edit", EditS[i], WS_BORDER|WS_CHILD|WS_VISIBLE,
10, (40*i)+23, 90, 18, hWndF,
HMENU(IDC_MyEDIT+i),
pCreateStruct->hInstance, NULL)) return 1; // создаем в цикле едиты
}
return 0;
}
int LoadCFG()
{
WCHAR szPath[MAX_PATH];
GetModuleFileName(g_hInst,szPath,MAX_PATH);
(*((wcsrchr(szPath,'\\'))+1))=0;
StringCchCat(szPath,MAX_PATH,L"\\VOAManager.cfg");
HANDLE hFile = CreateFile(szPath,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(!hFile) return 1;
FileCFG CFG;
DWORD dwBytesRead;
if(!ReadFile(hFile,&CFG,sizeof FileCFG,&dwBytesRead,NULL))
{
CloseHandle(hFile);
return GetLastError();
}
CloseHandle(hFile);
wchar_t* s = new wchar_t[255];
_itow(CFG.nled,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+0,WM_SETTEXT,0,(LPARAM)s);
_itow(CFG.len,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+1,WM_SETTEXT,0,(LPARAM)s);
_itow(CFG.ondown,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+2,WM_SETTEXT,0,(LPARAM)s);
_itow(CFG.onsip,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+3,WM_SETTEXT,0,(LPARAM)s);
_itow(CFG.keyon,s,10);
SendDlgItemMessage(hWndF,IDC_MyEDIT+4,WM_SETTEXT,0,(LPARAM)s);
delete s;
return 0;
}
int SaveCFG()
{
wchar_t* s = new wchar_t[255];
SendDlgItemMessage(hWndF,IDC_MyEDIT+0,WM_GETTEXT,255,(LPARAM)s);
int nl = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+1,WM_GETTEXT,255,(LPARAM)s);
int len = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+2,WM_GETTEXT,255,(LPARAM)s);
int od = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+3,WM_GETTEXT,255,(LPARAM)s);
int os = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+4,WM_GETTEXT,255,(LPARAM)s);
int ko = _wtoi(s);
delete s;
WCHAR szPath[MAX_PATH];
GetModuleFileName(g_hInst,szPath,MAX_PATH);
(*((wcsrchr(szPath,'\\'))+1))=0;
StringCchCat(szPath,MAX_PATH,L"\\VOAManager.cfg");
HANDLE hFile = CreateFile(szPath,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(!hFile) return 1;
FileCFG CFG;
DWORD dwBytesWrite;
CFG.keyon=ko;
CFG.len=len;
CFG.nled=nl;
CFG.ondown=od;
CFG.onsip=os;
if(!WriteFile(hFile,&CFG,sizeof FileCFG,&dwBytesWrite,NULL))
{
CloseHandle(hFile);
return GetLastError();
}
CloseHandle(hFile);
return 0;
}
int RunVOA()
{
HWND hWindow;
PROCESS_INFORMATION pi;
WCHAR szPath[MAX_PATH];
GetModuleFileName(g_hInst,szPath,MAX_PATH);
(*((wcsrchr(szPath,'\\'))+1))=0;
StringCchCat(szPath,MAX_PATH,L"\\VOA.exe");
// получаем путь и добавляем к пути файл ВОА
hWindow = FindWindow(L"VOA", 0);
// у меня не работает так как вибрации у меня нет и файл VOA не запускаеться
if (hWindow)
{
CreateProcess(szPath, L"", NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi);
}
// находим VOA если он запущен запускаем его чтобы он выгрузился (задумка автора VOA )
if(!hWindow) //проверяем на всякий пожарный запущен ли он если нет
{
wchar_t* s = new wchar_t[10];
wchar_t* SS = new wchar_t[255];
SendDlgItemMessage(hWndF,IDC_MyEDIT+0,WM_GETTEXT,255,(LPARAM)s);
int nled = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+1,WM_GETTEXT,255,(LPARAM)s);
int len = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+2,WM_GETTEXT,255,(LPARAM)s);
int ondown = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+3,WM_GETTEXT,255,(LPARAM)s);
int onsip = _wtoi(s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+4,WM_GETTEXT,255,(LPARAM)s);
int keyon = _wtoi(s); // смысол такой получаем все с едитов и добавляем в одну стр
SS[0]=0;
_itow(nled,s,10);
StringCchCat(SS,255,L" -nled ");
StringCchCat(SS,255,s);
_itow(len,s,10);
StringCchCat(SS,255,L" -len ");
StringCchCat(SS,255,s);
_itow(ondown,s,10);
StringCchCat(SS,255,L" -ondown ");
StringCchCat(SS,255,s);
_itow(onsip,s,10);
StringCchCat(SS,255,L" -onsip ");
StringCchCat(SS,255,s);
_itow(keyon,s,10);
StringCchCat(SS,255,L" -keyon ");
StringCchCat(SS,255,s);
SendDlgItemMessage(hWndF,IDC_MyEDIT+5,WM_GETTEXT,255,(LPARAM)s);
StringCchCat(SS,255,L" ");
StringCchCat(SS,255,s);
delete(s);
if(!CreateProcess(szPath, SS, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi))
{ // вот здесь запускаем фал с командной строкой.
return 1;
}
}
return 0;
}
FormFunc.h
#define IDC_MySTATIC 10000
#define IDC_MyEDIT 20000
extern HINSTANCE g_hInst;
extern HWND hWndF;
extern int CreateWin(CREATESTRUCT* pCreateStruct);
extern int LoadCFG();
extern int SaveCFG();
extern int RunVOA();
VOAManager.cpp
// VOAManager.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "VOAManager.h"
#include "FormFunc.h"
#define MAX_LOADSTRING 100
// Global Variables:
HINSTANCE g_hInst; // current instance
HWND g_hWndMenuBar; // menu bar handle
HWND hWndF;
// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE, LPTSTR);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
// Perform application initialization:
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}
HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_VOAMANAGER));
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_VOAMANAGER));
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass;
return RegisterClass(&wc);
}
//
// FUNCTION: InitInstance(HINSTANCE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
TCHAR szTitle[MAX_LOADSTRING]; // title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // main window class name
g_hInst = hInstance; // Store instance handle in our global variable
#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
// SHInitExtraControls should be called once during your application's initialization to initialize any
// of the device specific controls such as CAPEDIT and SIPPREF.
SHInitExtraControls();
#endif // WIN32_PLATFORM_PSPC || WIN32_PLATFORM_WFSP
HWND hWnd;
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_VOAMANAGER, szWindowClass, MAX_LOADSTRING);
#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
//If it is already running, then focus on the window, and exit
hWnd = FindWindow(szWindowClass, szTitle);
if (hWnd)
{
// set focus to foremost child window
// The "| 0x00000001" is used to bring any owned windows to the foreground and
// activate them.
SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
return 0;
}
#endif // WIN32_PLATFORM_PSPC || WIN32_PLATFORM_WFSP
if (!MyRegisterClass(hInstance, szWindowClass))
{
return FALSE;
}
hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
#ifdef WIN32_PLATFORM_PSPC
// When the main window is created using CW_USEDEFAULT the height of the menubar (if one
// is created is not taken into account). So we resize the window after creating it
// if a menubar is present
if (g_hWndMenuBar)
{
RECT rc;
RECT rcMenuBar;
GetWindowRect(hWnd, &rc);
GetWindowRect(g_hWndMenuBar, &rcMenuBar);
rc.bottom -= (rcMenuBar.bottom - rcMenuBar.top);
MoveWindow(hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE);
}
#endif // WIN32_PLATFORM_PSPC
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//
// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static SHACTIVATEINFO s_sai;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case ID_MENU_LOAD:
if (LoadCFG()>0){MessageBox(hWndF,L"Config not load.",L"Error",0);};
break;
case ID_MENU_SAVE:
if (SaveCFG()>0){MessageBox(hWndF,L"Config not saved.",L"Error",0);};
break;
case ID_EXIT:
SendMessage (hWnd, WM_CLOSE, 0, 0);
break;
case IDM_HELP_ABOUT:
DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
break;
#ifdef WIN32_PLATFORM_PSPC
case IDM_OK:
{
if (SaveCFG()>0){MessageBox(hWndF,L"Config not saved.",L"Error",0);};
if (RunVOA()>0){MessageBox(hWndF,L"Not run 'VOA.EXE'",L"Error",0);};
SendMessage (hWnd, WM_CLOSE, 0, 0);
break;
}
#endif // WIN32_PLATFORM_PSPC
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CREATE:
#ifdef SHELL_AYGSHELL
hWndF = hWnd;
CreateWin((LPCREATESTRUCT)lParam);
LoadCFG();
SHMENUBARINFO mbi;
memset(&mbi, 0, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = hWnd;
mbi.nToolBarId = IDR_MENU;
mbi.hInstRes = g_hInst;
if (!SHCreateMenuBar(&mbi))
{
g_hWndMenuBar = NULL;
}
else
{
g_hWndMenuBar = mbi.hwndMB;
}
// Initialize the shell activate info structure
memset(&s_sai, 0, sizeof (s_sai));
s_sai.cbSize = sizeof (s_sai);
#endif // SHELL_AYGSHELL
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
#ifdef SHELL_AYGSHELL
CommandBar_Destroy(g_hWndMenuBar);
#endif // SHELL_AYGSHELL
PostQuitMessage(0);
break;
case WM_ACTIVATE:
// Notify shell of our activate message
SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
break;
case WM_SETTINGCHANGE:
SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
#ifdef SHELL_AYGSHELL
{
// Create a Done button and size it.
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
}
#endif // SHELL_AYGSHELL
return (INT_PTR)TRUE;
case WM_COMMAND:
#ifdef SHELL_AYGSHELL
if (LOWORD(wParam) == IDOK)
#endif
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
case WM_CLOSE:
EndDialog(hDlg, message);
return (INT_PTR)TRUE;
}
return (INT_PTR)FALSE;
}
пятница, 8 февраля 2008 г.
Моя вторая программа. VOAManager
Вчера посидел по разбирался в с++.
Идеи чето не приходили в голову, и тут вспомнил про программу которая при нажатии стилусом дает кортковременную вибрацию, только настройки надо вводить с командной строке, решил сделать надстройку над этой программой, сделал.
Программа называется VOA автор constv
Ссылка на форум с программой VOA.
http://4pda.ru/forum/index.php?showtopic=68775
Назвал я её VOAManager.
Вот ссылки от куда качать VOAManager
WM2003 http://dump.ru/files/o/o034379187/
WM5 http://dump.ru/files/o/o1370462480/
На сайте указанном выше есть описание какие настройки должны быть, их и нужно вводить в поля.
VOAManager.exe должен находится в одной папке с VOA.exe вроде все.
Идеи чето не приходили в голову, и тут вспомнил про программу которая при нажатии стилусом дает кортковременную вибрацию, только настройки надо вводить с командной строке, решил сделать надстройку над этой программой, сделал.
Программа называется VOA автор constv
Ссылка на форум с программой VOA.
http://4pda.ru/forum/index.php?showtopic=68775
Назвал я её VOAManager.
Вот ссылки от куда качать VOAManager
WM2003 http://dump.ru/files/o/o034379187/
WM5 http://dump.ru/files/o/o1370462480/
На сайте указанном выше есть описание какие настройки должны быть, их и нужно вводить в поля.
VOAManager.exe должен находится в одной папке с VOA.exe вроде все.
четверг, 31 января 2008 г.
Теперь на visual C++ 2005
Создаём новый проект, выбераем smart device\ Win32 smart device project
В Name пишем имя проекта, OK
Нажимаем Next
Еще раз
ставим галочку empty project и финиш
Вот что получилось, теперь нажмем провой кнопкой на левую панель
выберем add\new item...
выберем C++ File (.cpp)
введем имя и нажмем add
введем текст который идет ниже он полность повторяет паскалевский только чуть изменен
#include -=windows.h=-
#include -=commctrl.h=-
#include "resource.h"
HWND hWinMain;
HINSTANCE hInst;
HANDLE Thread1;
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
DWORD WINAPI WaveOut(LPVOID pParm);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine,int nCmdShow)
{
MSG msg;
hInst = GetModuleHandle(0);
hWinMain = FindWindow(NULL,(LPCWSTR)"Proj3");
if (hWinMain)
{
ShowWindow(hWinMain, SW_SHOW);
SetForegroundWindow(hWinMain);
ExitProcess(0);
}
hWinMain = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG1),0,(DLGPROC)MainWndProc);
if (!hWinMain) ExitProcess(0);
ShowWindow(hWinMain,SW_SHOW);
UpdateWindow(hWinMain);
Thread1 = CreateThread(NULL,NULL,WaveOut,NULL,CREATE_SUSPENDED,NULL);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT wMsg,
WPARAM wParam, LPARAM lParam)
{
switch (wMsg) {
case WM_DESTROY:
EndDialog(hWnd, LOWORD(wParam));
break;
case WM_COMMAND:
int wmId = LOWORD(wParam);
int wmEvent = HIWORD(wParam);
switch (wmId)
{
case IDC_BUTTON1:
PostQuitMessage(0);
break;
case IDC_BUTTON2:
ResumeThread(Thread1);
break;
case IDC_BUTTON3:
SuspendThread(Thread1);
break;
}
break;
}
return DefWindowProc(hWnd, wMsg, wParam, lParam);
}
DWORD WINAPI WaveOut(LPVOID pParm)
{
wchar_t* s = new wchar_t[255];
while (true)
{
_ltow((long)GetTickCount(),s,10);
SendDlgItemMessageW(hWinMain,IDC_STATIC1,WM_SETTEXT,0,(LPARAM)s);
}
delete s;
return 0;
}
Тут все должно быть ясно, так как все взято с прошлого примера
Теперь нам надо добавить форму с кнопками статический текст
Снова нажимаем правой кнопкой мыши на левую панель и добавляем resource file(.rc) во вкладке resource, и в нем уже добавляем диалог.
перед нами форма с двумя кнопками, давайте их удалим, выделяем и нажимаем делет
в пустую форму заносим две кнопки и static text.
Далее жмем на форму и изменяем размер и настройки
Title menu стави false
Control = true
В настройках static изменяем ID
на IDC_STATIC1 и вытягиваем на всю ширину формы.
Забыл... добавим еще одну кнопку.
Ну вроде все пробуем, F5.
В Name пишем имя проекта, OK
Нажимаем Next
Еще раз
ставим галочку empty project и финиш
Вот что получилось, теперь нажмем провой кнопкой на левую панель
выберем add\new item...
выберем C++ File (.cpp)
введем имя и нажмем add
введем текст который идет ниже он полность повторяет паскалевский только чуть изменен
#include -=windows.h=-
#include -=commctrl.h=-
#include "resource.h"
HWND hWinMain;
HINSTANCE hInst;
HANDLE Thread1;
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
DWORD WINAPI WaveOut(LPVOID pParm);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine,int nCmdShow)
{
MSG msg;
hInst = GetModuleHandle(0);
hWinMain = FindWindow(NULL,(LPCWSTR)"Proj3");
if (hWinMain)
{
ShowWindow(hWinMain, SW_SHOW);
SetForegroundWindow(hWinMain);
ExitProcess(0);
}
hWinMain = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG1),0,(DLGPROC)MainWndProc);
if (!hWinMain) ExitProcess(0);
ShowWindow(hWinMain,SW_SHOW);
UpdateWindow(hWinMain);
Thread1 = CreateThread(NULL,NULL,WaveOut,NULL,CREATE_SUSPENDED,NULL);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT wMsg,
WPARAM wParam, LPARAM lParam)
{
switch (wMsg) {
case WM_DESTROY:
EndDialog(hWnd, LOWORD(wParam));
break;
case WM_COMMAND:
int wmId = LOWORD(wParam);
int wmEvent = HIWORD(wParam);
switch (wmId)
{
case IDC_BUTTON1:
PostQuitMessage(0);
break;
case IDC_BUTTON2:
ResumeThread(Thread1);
break;
case IDC_BUTTON3:
SuspendThread(Thread1);
break;
}
break;
}
return DefWindowProc(hWnd, wMsg, wParam, lParam);
}
DWORD WINAPI WaveOut(LPVOID pParm)
{
wchar_t* s = new wchar_t[255];
while (true)
{
_ltow((long)GetTickCount(),s,10);
SendDlgItemMessageW(hWinMain,IDC_STATIC1,WM_SETTEXT,0,(LPARAM)s);
}
delete s;
return 0;
}
Тут все должно быть ясно, так как все взято с прошлого примера
Теперь нам надо добавить форму с кнопками статический текст
Снова нажимаем правой кнопкой мыши на левую панель и добавляем resource file(.rc) во вкладке resource, и в нем уже добавляем диалог.
перед нами форма с двумя кнопками, давайте их удалим, выделяем и нажимаем делет
в пустую форму заносим две кнопки и static text.
Далее жмем на форму и изменяем размер и настройки
Title menu стави false
Control = true
В настройках static изменяем ID
на IDC_STATIC1 и вытягиваем на всю ширину формы.
Забыл... добавим еще одну кнопку.
Ну вроде все пробуем, F5.
Подписаться на:
Сообщения (Atom)