Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен пример кода, на WinApi 
:(
    Опции темы
russians
Дата 18.3.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



Добрый день. Поскольку под платформу Win я не разрабатывал ничего и никогда, то прошу участников форума: дайте пример кода, который формирует окно, на нём выставляет поле для ввода и кнопку. Задача такая: автоматизировать работу cgpsmapper, ибо заманало каждый раз создавать конфиг smile Конфиг pv.txt следующего содержания:

Код

[Map]
FileName=Italy
MapVersion=100
ProductCode=5 
Levels=2
Level0=15
Level1=13
Zoom0=7
Zoom1=8
MapsourceName=Italy
MapSetName=Italy
CDSetName=Italy
Copy1=Garmin
Copy2=Garmin
[End-Map]

[Files]
img=C:\Mapsoft\11000014.img
[END-Files]


Необходимо после формирования конфига запускать файл из консоли с параметром pv pv.txt, после чего приложением формируется файл Italy.reg, который надо отредактить:
HKEY_LOCAL_MACHINE\SOFTWARE\Garmin\MapSource\Products\<FileName> заменить на номер кода ProductCode, который задаётся вручную.
"LOC"="C:\\myMaps\\imgs\\", "Tdb"="e:\\maps\\gruzia\\gruzia.tdb" и "BMAP"="C:\\myMaps\\<FileName>.img" меняются на директории в которой лежит конвертируемая карта.

Сделать автоимпорт рег файла в регистр, при этом проверив, что в разделе Products не существует ветки с таким же именем. И.... всё smile

Задача была бы простой, если бы я знал, куда податься  smile Помогите с вопросом, плиз. Это всё нужно для автоматизации конвертирования карт в mapsource.

Заранее спасибо.

P.S. Я уже пробывал написать программу в WinApi, но afxwin.h (в котором есть CEdit) IDE выкидывает с сообщением: "1 C:\Mapsoft\main.cpp In file included from main.cpp" :(

Это сообщение отредактировал(а) russians - 18.3.2008, 11:05
PM MAIL   Вверх
Alek86
Дата 18.3.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: нет
Всего: 25



обратись в ветку форумапо WinAPI


--------------------
user posted image    user posted image
PM MAIL   Вверх
russians
Дата 18.3.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



окей
PM MAIL   Вверх
xvr
Дата 18.3.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(russians @ 18.3.2008,  11:00)
Добрый день. Поскольку под платформу Win я не разрабатывал ничего и никогда, то прошу участников форума: дайте пример кода, который формирует окно, на нём выставляет поле для ввода и кнопку. 

Мсье мазохист?
Цитата

Задача такая: автоматизировать работу cgpsmapper, ибо заманало каждый раз создавать конфиг smile 
Точно мазохист  smile 
Тебе нужен не WinAPI а какой-нибудь RAD, типа C# c .net или Borland C++ Builder/Delphi или на худой конец Visual Basic
Цитата

P.S. Я уже пробывал написать программу в WinApi, но afxwin.h (в котором есть CEdit) IDE выкидывает с сообщением: "1 C:\Mapsoft\main.cpp In file included from main.cpp" :(
afxwin.h - это не WinAPI а MFC, оно для продвинутых мазохистов  smile 
PM MAIL   Вверх
ama_kid
Дата 18.3.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



Цитата
дайте пример кода, который формирует окно, на нём выставляет поле для ввода и кнопку
ну раз надо - значит надо... лови:
Код
// WindowBasic.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "WindowBasic.h"
#define MAX_LOADSTRING 100
#define IDB_ACCEPT                 106
#define IDB_EDIT                   107

// Global Variables:
HINSTANCE hInst;                                // current instance
TCHAR szTitle[MAX_LOADSTRING];                    // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name
HWND hWnd_Global;
HWND hWnd_Btn;
HWND hWnd_Edit;
WNDPROC wpOrigEditProc;

// Forward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT APIENTRY    EditWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
//LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;

    // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_WINDOWBASIC, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow)) 
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_WINDOWBASIC);

    // 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:
//
//    This function and its usage are only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX); 

    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = NULL;//LoadIcon(hInstance, (LPCTSTR)IDI_TRAYICON);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName    = NULL;
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = NULL;//LoadIcon(wcex.hInstance, (LPCTSTR)IDI_TRAYICON);

    return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HANDLE, 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)
{
   hInst = hInstance; // Store instance handle in our global variable
   hWnd_Global = CreateWindow(szWindowClass, szTitle,  WS_OVERLAPPEDWINDOW,
                  100, 100, 200, 120, NULL, NULL, hInstance, NULL);
   hWnd_Btn = CreateWindow("BUTTON",                    // predefined class 
               "ACCEPT",                   // button text 
               WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,    // styles  
               // Size and position values are given explicitly, because 
               // the CW_USEDEFAULT constant gives zero values for buttons. 
               35,45,120,25,                // set size in WM_SIZE message 
               hWnd_Global,                    // parent window 
               NULL,                    // No menu 
               (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
               NULL);                    // pointer not needed 
   SetWindowLong(hWnd_Btn,GWL_ID,IDB_ACCEPT);
   hWnd_Edit = CreateWindow("EDIT",                    // predefined class 
                "Label for Test",                    // no window title 
                WS_CHILD | WS_VISIBLE | WS_BORDER | 
                ES_LEFT, 
                35, 15, 120, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed 
   SetWindowLong(hWnd_Edit,GWL_ID,IDB_EDIT);
   wpOrigEditProc = (WNDPROC) SetWindowLong(hWnd_Edit,GWL_WNDPROC, (LONG) EditWndProc);

   if (!hWnd_Global)
   {
      return FALSE;
   }

   ShowWindow(hWnd_Global, nCmdShow);
   UpdateWindow(hWnd_Global);

   return TRUE;
}

//
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
//  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 EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    //if ((uMsg == WM_KEYUP) &&(wParam==13)) CheckPassword(); 
    return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message) 
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam); 
        wmEvent = HIWORD(wParam); 
        // Parse the menu selections:
        if ((wmId==IDB_ACCEPT)&&(wmEvent == BN_CLICKED)) 
        {
            char txt[100];
            GetWindowText(hWnd_Edit,txt,100);
            MessageBox(0,txt,"Button Test",0);
        }
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
russians
Дата 18.3.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



ama_kid, ругается на библиотеки smile Из Dev_Cpp вылетает со словами "4 C:\Dev-Cpp\main.cpp In file included from main.cpp"  Откуда код взял?
PM MAIL   Вверх
ama_kid
Дата 18.3.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



Цитата(russians @  18.3.2008,  15:16 Найти цитируемый пост)
Откуда код взял?
сам написал и он работает... какая среда-то у тебя?



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
russians
Дата 18.3.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



ama_kid, Dev-Cpp, юзает MingW
И WindowBasic.h тоже нету, запиши плиз smile

Это сообщение отредактировал(а) russians - 18.3.2008, 16:02
PM MAIL   Вверх
ama_kid
Дата 18.3.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



Цитата(russians @  18.3.2008,  15:44 Найти цитируемый пост)
Dev-Cpp, юзает MingW
ага, а код - для мелкомягкой студии... К сожалению, Dev-CPP нету, поэтому портировать не смогу...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
ama_kid
Дата 18.3.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



закачал себе DevCPP, получай портированный код:
Код
#include <windows.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
#define IDS_APP_TITLE               103
#define MAX_LOADSTRING             100
#define IDB_ACCEPT                 106
#define IDB_EDIT                   107
#define IDC_WINDOWBASIC            109

// Global Variables:
HINSTANCE hInst;                                // current instance

char szClassName[ ] = "WindowsApp";
HWND hWnd_Global;
HWND hWnd_Btn;
HWND hWnd_Edit;
WNDPROC wpOrigEditProc;

LRESULT CALLBACK EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
}

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    //HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
   hWnd_Global = CreateWindow(szClassName, "Window Basic",  WS_OVERLAPPEDWINDOW,
                  100, 100, 200, 120, NULL, NULL, hThisInstance, NULL);
   hWnd_Btn = CreateWindow("BUTTON",                    // predefined class 
               "ACCEPT",                   // button text 
               WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,    // styles  
               // Size and position values are given explicitly, because 
               // the CW_USEDEFAULT constant gives zero values for buttons. 
               35,45,120,25,                // set size in WM_SIZE message 
               hWnd_Global,                    // parent window 
               NULL,                    // No menu 
               (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
               NULL);                    // pointer not needed 
   SetWindowLong(hWnd_Btn,GWL_ID,IDB_ACCEPT);
   hWnd_Edit = CreateWindow("EDIT",                    // predefined class 
                "Label for Test",                    // no window title 
                WS_CHILD | WS_VISIBLE | WS_BORDER | 
                ES_LEFT, 
                35, 15, 120, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed 
   SetWindowLong(hWnd_Edit,GWL_ID,IDB_EDIT);
   wpOrigEditProc = (WNDPROC) SetWindowLong(hWnd_Edit,GWL_WNDPROC, (LONG) EditWndProc);
   
    /* Make the window visible on the screen */
    ShowWindow (hWnd_Global, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message) 
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam); 
        wmEvent = HIWORD(wParam); 
        // Parse the menu selections:
        if ((wmId==IDB_ACCEPT)&&(wmEvent == BN_CLICKED)) 
        {
            char txt[100];
            GetWindowText(hWnd_Edit,txt,100);
            MessageBox(0,txt,"Button Test",0);
        }
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
russians
Дата 19.3.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



Код

#include <windows.h>
#include <iostream.h>
#include <fstream.h>
#include <string.h>
using namespace std;

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
#define IDS_APP_TITLE               103
#define MAX_LOADSTRING             100
#define IDB_ACCEPT                 106
#define IDB_EDIT                   107
#define IDC_WINDOWBASIC            109

// Global Variables:
HINSTANCE hInst;                                // current instance

char szClassName[ ] = "WindowsApp";
HWND hWnd_Global;
HWND hWnd_Btn;
HWND hWnd_Edit;
HWND hWnd_Edit1;
HWND hWnd_Edit2;
HWND hWnd_Label;
HWND hWnd_Label1;
HWND hWnd_Label2;
WNDPROC wpOrigEditProc;

LRESULT CALLBACK EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
}

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    //HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
   hWnd_Global = CreateWindow(szClassName, "cgpsmapper AUTOMAKE",  WS_OVERLAPPEDWINDOW,
                  0, 0, 800, 600, NULL, NULL, hThisInstance, NULL);
   hWnd_Btn = CreateWindow("BUTTON",                    // predefined class 
               "ACCEPT",                   // button text 
               WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,    // styles  
               // Size and position values are given explicitly, because 
               // the CW_USEDEFAULT constant gives zero values for buttons. 
               100,150,120,25,                // set size in WM_SIZE message 
               hWnd_Global,                    // parent window 
               NULL,                    // No menu 
               (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
               NULL);                    // pointer not needed 
   SetWindowLong(hWnd_Btn,GWL_ID,IDB_ACCEPT);
   hWnd_Edit = CreateWindow("EDIT",                    // predefined class 
                "GlobalMapDefault",                    // no window title 
                WS_CHILD | WS_VISIBLE | WS_BORDER | 
                ES_LEFT, 
                150, 15, 250, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
   
   hWnd_Label = CreateWindow("STATIC",                    // predefined class 
                "Íàçâàíèå êàðòû",                    // no window title 
                WS_CHILD | WS_VISIBLE |  
                ES_LEFT, 
                10, 15, 120, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
                
   hWnd_Edit1 = CreateWindow("EDIT",                    // predefined class 
                "0",                    // no window title 
                WS_CHILD | WS_VISIBLE | WS_BORDER | 
                ES_LEFT, 
                150, 55, 250, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
   
   hWnd_Label1 = CreateWindow("STATIC",                    // predefined class 
                "Product Code",                    // no window title 
                WS_CHILD | WS_VISIBLE |  
                ES_LEFT, 
                15, 55, 120, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
                
   hWnd_Edit2 = CreateWindow("EDIT",                    // predefined class 
                "C:\\Mapsoft\\Default.img",                    // no window title 
                WS_CHILD | WS_VISIBLE | WS_BORDER | 
                ES_LEFT, 
                150, 95, 250, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
   
   hWnd_Label2 = CreateWindow("STATIC",                    // predefined class 
                "File Name",                    // no window title 
                WS_CHILD | WS_VISIBLE |  
                ES_LEFT, 
                15, 95, 120, 25,                // set size in WM_SIZE message 
                hWnd_Global,                // parent window 
                NULL,                    // edit control ID 
                (HINSTANCE) GetWindowLong(hWnd_Global, GWL_HINSTANCE), 
                NULL);                    // pointer not needed
   
                
                               
   SetWindowLong(hWnd_Edit,GWL_ID,IDB_EDIT);
   wpOrigEditProc = (WNDPROC) SetWindowLong(hWnd_Edit,GWL_WNDPROC, (LONG) EditWndProc);
   
    /* Make the window visible on the screen */
    ShowWindow (hWnd_Global, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message) 
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam); 
        wmEvent = HIWORD(wParam); 
        // Parse the menu selections:
        if ((wmId==IDB_ACCEPT)&&(wmEvent == BN_CLICKED)) 
        {
            char CardName[250];
            char ProductCode[250];
            char FileName[250];
            char OutputFile[3000];
            GetWindowText(hWnd_Edit,CardName,250);
            GetWindowText(hWnd_Edit1,ProductCode,250);
            GetWindowText(hWnd_Edit2,FileName,250);
            OutputFile = "[Map]\n"+"FileName="+CardName+"\n"+"MapVersion=100\n"+
            "ProductCode="+ProductCode+"\n"+"Levels=2\n"+"Level0=15\n"+"Level1=13\n"+
            "Zoom0=7\n"+"Zoom1=8\n"+"MapsourceName="+CardName+"\n"+"MapSetName="+CardName+"\n"+
            "CDSetName="+CardName+"\n"+"Copy1=Garmin\n"+"Copy2=Garmin\n"+"[End-Map]\n\n"+
            "[Files]\n"+"img="+FileName+"\n"+"[END-Files]";
            FILE * fo;
            fo = fopen("pv.txt","wt");
            while( !feof(fo) ) 
            {
                   fprintf( fo, "%d\n", OutputFile );
            }
            
        }
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;

}



Выдаёт следующее:

2 C:\Dev-Cpp\include\c++\3.4.2\backward\fstream.h:31,               from main.cpp In file included from C:/Dev-Cpp/include/c++/3.4.2/backward/fstream.h:31,               from main.cpp 
32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. 
 C:\Dev-Cpp\main.cpp In function `LRESULT WindowProcedure(HWND__*, UINT, WPARAM, LPARAM)': 

184 C:\Dev-Cpp\main.cpp invalid operands of types `const char[7]' and `const char[10]' to binary `operator+' 
 C:\Dev-Cpp\Makefile.win [Build Error]  [main.o] Error 1 

По поводу строк: оператор + в строках не используется?
PM MAIL   Вверх
ama_kid
Дата 19.3.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



russians, во-первых, если тебе iostream.h и fstream.h нужны только для FILE, то лучше использовать stdio.h - не будет левых варнингов...
Во вторых, как тебе такой код?
Код

    case WM_COMMAND:
        wmId    = LOWORD(wParam); 
        wmEvent = HIWORD(wParam); 
        // Parse the menu selections:
        if ((wmId==IDB_ACCEPT)&&(wmEvent == BN_CLICKED)) 
        {
            char CardName[250];
            char ProductCode[250];
            char FileName[250];
            char OutputFile[3000]="";
            GetWindowText(hWnd_Edit,CardName,250);
            GetWindowText(hWnd_Edit1,ProductCode,250);
            GetWindowText(hWnd_Edit2,FileName,250);
            strcpy(OutputFile,"[Map]\nFileName=");
            strcat(OutputFile,CardName);
            strcat(OutputFile,"\nMapVersion=100\nProductCode=");
            strcat(OutputFile,ProductCode);
            strcat(OutputFile,"\nLevels=2\nLevel0=15\nLevel1=13\nZoom0=7\nZoom1=8\nMapsourceName=");
            strcat(OutputFile,CardName);
            strcat(OutputFile,"\nMapSetName=");
            strcat(OutputFile,CardName);
            strcat(OutputFile,"\nCDSetName=");
            strcat(OutputFile,CardName);
            strcat(OutputFile,"\nCopy1=Garmin\nCopy2=Garmin\n[End-Map]\n\n[Files]\nimg=");
            strcat(OutputFile,FileName);
            strcat(OutputFile,"\n[END-Files]");
            FILE * fo;
            fo = fopen("pv.txt","wt");
            fprintf( fo, "%s\n", OutputFile );
            fclose(fo);           
        }

Цитата(russians @  19.3.2008,  14:12 Найти цитируемый пост)
оператор + в строках не используется? 
используй операцию конкатенации...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
russians
Дата 20.3.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



ama_kid, strcpy я подумывал использовать, НО это гемор с написанием... конвертнуть в string сложить а потом в char никак?
И ещё, какие существуют способы выполнения внешнего файла из командной строки с параметром?
Без CreateProcess никак?

Это сообщение отредактировал(а) russians - 20.3.2008, 09:58
PM MAIL   Вверх
ama_kid
Дата 20.3.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



Цитата(russians @  20.3.2008,  09:34 Найти цитируемый пост)
конвертнуть в string сложить а потом в char никак?
Код
#include <cstdlib>
#include <iostream>

using namespace std;

class String
{
private:
   char string[1024];
public:
   String();
   String(char*);
   friend String operator+(String,String);
   friend ostream& operator<< (ostream&,String&);
   char * GetString();
};
String::String()
{
   string[0]='\0';
}
String::String(char*str)
{
   int index = 0;
   while(str[index]!='\0')
      string[index] = str[index++];
   string[index]='\0';
}
String operator+(String S1,String S2)
{
   String res_string;
   int index = 0,index2 = 0;
   while(S1.string[index]!='\0')
      res_string.string[index] = S1.string[index++];
   while(S2.string[index2]!='\0')
      res_string.string[index++] = S2.string[index2++];
   res_string.string[index]='\0';
   return res_string;
}
ostream& operator<< (ostream& out,String& str)
{
      out<<str.string<<endl;
      return out;
}

char * String::GetString()
{
 return &string[0];
}

int main(int argc, char *argv[])
{
   String S1, S2("abc"), S3("12234");
   S1 = S2+S3;
   cout<<S1.GetString();
   cin.get();
   return EXIT_SUCCESS;
}

Цитата
И ещё, какие существуют способы выполнения внешнего файла из командной строки с параметром?Без CreateProcess никак?
А чем тебя CreateProcess не устраивает? Можно конечно WinExec юзать, но имхо лучше CreateProcess...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
russians
Дата 20.3.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



Так, базовая задача решена, осталось дело за малым, есть Reg файл, сгенерированный программой:

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Garmin\MapSource\Products\GlobalMapDefault]
"LOC"="C:\\myMaps\\imgs\\"
"BMAP"="C:\\myMaps\\GlobalMapDefault.img"
"TDB"="C:\\myMaps\\GlobalMapDefault.tdb"

Нужно определить позиции вхождения и позаменять GlobalMapDefault на ProductCode и myMaps на имя локальной папки...
Как определить локальную папку нахождения программы?  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.