Alternativ kannst du Checkboxen nur in der Größe der Box selbst ohne Text erstellen und deaktivieren. Den Text schreibst du dann in ein Label daneben.
Beiträge von BugFix
-
-
Ich habe jetzt den Aufruf der WinMain in die InitFunktion eingefügt:
Kann ich Parameter 3 (szCmdLine) mit dem erfundenen Wert belegen? Oder was muß dort sonst hin?
Im Moment zeigt das noch keine Wirkung.
Auch wenn ich SW_SHOW übergebe und zusätzlich OnTop setze (SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE ); ist nix zu sehen.
-
Wie wär es, wenn du mal die Suchfunktion nutzt?
Es liegen fertige Chatprogramme vor, inkl. Smileys und Userlist. -
Packe die Dateien in eine .zip und benenne diese in .jar um
Wie ich schon geschrieben habe, ist das Umbenennen bei den meisten Packern gar nicht erforderlich. Eine *.jar wird ald zip erkannt und auch so behandelt - völlig problemlos. -
Schau mal hier rein.
-
So, Dank progandys kräftiger Aufklärungsarbeit
habe ich nun das PlugIn so fertigstellen können, dass es von Notepad++ akzeptiert wird.
Aber... die gewünschte Funktionalität ist noch nicht da.
Die Fenstererstellung/-aktivierung scheint das Problem zu sein. Denn selbst wenn ich das (sonst nicht sichtbare) Fenster mittels ShowWindow(hWnd, iCmdShow); einfach mal anzeigen lassen will, erscheint es nicht.
Hier die entsprechende *.cppSpoiler anzeigen
C
Alles anzeigen//this file is part of notepad++ //Copyright (C)2003 Don HO <donho@altern.org> // //This program is free software; you can redistribute it and/or //modify it under the terms of the GNU General Public License //as published by the Free Software Foundation; either //version 2 of the License, or (at your option) any later version. // //This program is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU General Public License for more details. // //You should have received a copy of the GNU General Public License //along with this program; if not, write to the Free Software //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "PluginDefinition.h" #define NDM_GETSCINTILLAMAIN (WM_USER+101) #define NDM_GETSCINTILLASECOND (WM_USER+102) #define NDM_GETNPPWINDOW (WM_USER+103) #ifdef UNICODE extern "C" __declspec(dllexport) BOOL isUnicode() { return TRUE; } #endif //UNICODE extern FuncItem funcItem[nbFunc]; extern NppData nppData; BOOL APIENTRY DllMain( HANDLE hModule, DWORD reasonForCall, LPVOID lpReserved ) { switch (reasonForCall) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } extern "C" __declspec(dllexport) void setInfo(NppData notpadPlusData) { nppData = notpadPlusData; commandMenuInit(); } extern "C" __declspec(dllexport) const TCHAR * getName() { return NPP_PLUGIN_NAME; } extern "C" __declspec(dllexport) FuncItem * getFuncsArray(int *nbF) { *nbF = nbFunc; return funcItem; } extern "C" __declspec(dllexport) void beNotified(SCNotification *notifyCode) { } // Here you can process the Npp Messages // I will make the messages accessible little by little, according to the need of plugin development. // Please let me know if you need to access to some messages : // http://sourceforge.net/forum/forum.php?forum_id=482781 // extern "C" __declspec(dllexport) LRESULT messageProc(UINT Message, WPARAM wParam, LPARAM lParam) {/* if (Message == WM_MOVE) { ::MessageBox(NULL, "move", "", MB_OK); } */ return TRUE; } // ============================== Eigenes Fenster zum Nachrichtenaustausch ============================= LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASSEX wc; wchar_t *lpszAppName = L"NppWatcher"; wchar_t *lpszTitle = L"Npp-PlugIn"; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1); wc.lpszClassName = lpszAppName; wc.lpszMenuName = lpszAppName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if( RegisterClassEx(&wc) == 0) return 0; hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, lpszAppName, lpszTitle, WS_OVERLAPPEDWINDOW, 10, // 0 10, // 0 CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if( hWnd == NULL) return 0; ShowWindow(hWnd, iCmdShow); // nur zum Test - sonst verstecken, Befehl auskommentieren UpdateWindow(hWnd); while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam) { switch (umsg) { case NDM_GETSCINTILLAMAIN: return (LPARAM)nppData._scintillaMainHandle; case NDM_GETSCINTILLASECOND: return (LPARAM)nppData._scintillaSecondHandle; case NDM_GETNPPWINDOW: return (LPARAM)nppData._nppHandle; /* // alternativ ausschließlich das Current-Handle holen case NPPM_GETCURRENTSCINTILLA: { int which = -1; ::SendMessage(nppData._nppHandle, NPPM_GETCURRENTSCINTILLA, 0, (LPARAM)&which); if (which == -1) return which; HWND curScintilla = (which == 0)?nppData._scintillaMainHandle:nppData._scintillaSecondHandle; return (LPARAM)curScintilla; } */ case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, umsg, wParam, lParam); }
Was mache ich da noch falsch?Ich habe den kpl. Code (erstellt aus einem DemoPlugIn) mal gezipt als Codeblock-Projekt angehängt.
-
45 ? Das Lösungsschema ist nur für ein Ctrl ausgelegt.
Wenn du mehrere verwendest, mußt du für jedes Ctrl eine eigene Liste laden und zwar in Abhängigkeit, welches Ctrl gerade den Fokus hat. Du mußt also bei Fokuswechsel die Variable $SenseCtrl neu zuweisen. Dann könnte das klappen. -
Ich geh am Stock - ich exportiere die Funktion "isUnicode" - aber sie ist nirgends vorhanden. Man oh man, wie blöd kann man sein.
Erst mal gucken wie die aussehn muß. -
-
OK, Danke. Hab die Fehler jetzt mit 'L' behoben.
Jetzt ist mir nur noch unklar, wieso für "#ifdef UNICODE..." die Fehlermeldung 'BOOL' does not name a type
erscheint. Wo ist da der Zusammenhang mit UNICODE. Denn bevor ich die Buildoption gesetzt hatte ist dieser Code nicht beanstandet worden. -
Dafür hatte ich mal was geschrieben: IntelliSenseBox
-
:wacko: Was sind das für Funktionen ( L, _T ) ? Ich habe eine 700-Seiten dicke C/C++ Referenz, aber das konnte ich da unter dem Funktionsverzeichnis nicht finden.
In meiner Fensterdeklaration habe ich das jetzt verwendet.
vorher:jetzt:
Das Seltsame: jetzt bekomme ich nur für die erste der beiden Zeilen einen Error ( 'L' was not declared in this scope ). Müßte doch eigentlich 2-mal auftauchen. In welchem Include ist das eigentlich enthalten?
Ach und hier
bekomme ich jetzt folgenden Fehler: error: 'BOOL' does not name a type
-
Ahh, OK - habe jetzt einfach mal bei den Buildoptions in den Tab "#define' UNICODE mit eingetragen. Und siehe da es tut sich was: Mein Code fliegt mir um die Ohren! Unzählige Fehlermeldungen "...cannot convert.." :wacko:
Man oh man, gar nicht so einfach mit dem C/C++ Krams. -
Du musst die Funktion isUnicode exportieren
Das hatte ich bereits drin:
dass du die Buildoptionen so eingestellt hast, dass TCHAR in unicode char umgewandelt wird
Und hier hakt es. Ich habe in den CodeBlocks Einstellungen gewühlt und das Manual vor und zurück gelesen. Ich finde einfach nicht diese Option. Ich weiß, dass ich mal zum Augenarzt muß - aber so blind bin ich doch wohl noch nicht, dass ich das übersehe - oder doch? :wacko:
-
So, nun ist alles fehlefrei kompiliert, PlugIn zu Notepad++ rübergeschoben und NPP gestartet: "Dies ist ein ANSI-Plugin und kann nicht mit dieser Version von Notepad++ genutzt werden...."
Mist, wo zum Teufel wird das eingestellt? Sollte doch wohl irgendwo in den Build-Einstellungen sein. Aber ich finde nix. Ist es eine zusätzliche Angabe für den Linker, in der Art "UNICODE=1" ? Getestet hab ich das so, wurde aber von CodeBlocks abgelehnt. -
Ich habe nun mal versucht, auf Basis des DemoPlugins ein Kommunikations-Plugin zu erstellen.
Probleme entstehen bei der MSG-Auswertung.
Wenn ich die MSG, die ich ja aus AutoIt heraus mit _SendMessage() an dieses Fenster senden möchte, im dortigen Auswertezweig als "Case MSG" unterbringe, bekomme ich Fehlermeldungen (Zeile 71).
Kann ich dann eigentlich die Handle z.B. mit "return NppData._scintillaMainHandle;" zurückgeben, oder ist noch mehr zu beachten?Spoiler anzeigen
Code
Alles anzeigen#include "main.h" // The data of Notepad++ that you can use in your plugin commands NppData nppData; // Initialize your plugin data here // It will be called while plugin loading void pluginInit(HANDLE hModule) { } LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LPCSTR lpszAppName = "NppWatcher"; LPCSTR lpszTitle = "Npp-PlugIn"; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1); wc.lpszClassName = lpszAppName; wc.lpszMenuName = lpszAppName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if( RegisterClassEx(&wc) == 0) return 0; hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, lpszAppName, lpszTitle, WS_OVERLAPPEDWINDOW, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if( hWnd == NULL) return 0; // ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam) { switch (umsg) { case NDM_GETSCINTILLAMAIN: // mit #define in Header-Datei deklariert // error: expected primary-expression before '=' token // error: an assignment cannot appear in a constant expression /* case NDM_GETSCINTILLASECOND: case NDM_GETNPPWINDOW: */ case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, umsg, wParam, lParam); } -
Ich danke dir, das wars.
So paßt es:main.cpp
Code
Alles anzeigen#include "main.h" extern "C" { __declspec(dllexport) int __cdecl Addi (int,int); __declspec(dllexport) int __cdecl Multi (int,int); } __declspec(dllexport) int __cdecl Addi (int x1,int x2) { int returnvar; { returnvar=x1 + x2; } return returnvar; } __declspec(dllexport) int __cdecl Multi (int x1,int x2) { int returnvar; { returnvar=x1 * x2; } return returnvar; } -
-
Hi,
ich habe gerade meine ersten Gehversuche mit C++ gemacht.
Es ist mir dann auch gelungen eine funktionierende Dll zu erstellen. (IDE: CodeBlocks, Kompiler: GNU GCC)
Soweit ich gelesen habe, soll das Voranstellen von "extern "C" __declspec(dllexport) ..." dafür sorgen, dass ich die Funktionen in der Dll auch mit dem vergebenen Namen ansprechen kann.
Es wird jedoch trotzdem an den Funktionsnamen "@8" angehängt, wobei die Zahl abhängig ist vom belegten Speicherplatz.
Hier mal meine Test-Dll:main.h
C
Alles anzeigen#ifdef BUILD_DLL /* DLL export */ #define EXPORT __declspec(dllexport) #else /* EXE import */ #define EXPORT __declspec(dllimport) #endif #define WIN32_LEAN_AND_MEAN // Selten verwendete Teile der Windows-Header nicht einbinden. // Windows-Headerdateien: #include <windows.h> BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }main.cpp
Code
Alles anzeigen#include "main.h" extern "C" { __declspec(dllexport) int _stdcall Addi (int,int); __declspec(dllexport) int _stdcall Multi (int,int); } __declspec(dllexport) int _stdcall Addi (int x1,int x2) { int returnvar; { returnvar=x1 + x2; } return returnvar; } __declspec(dllexport) int _stdcall Multi (int x1,int x2) { int returnvar; { returnvar=x1 * x2; } return returnvar; }
Muß ich da noch weitere Angaben machen oder Kompilerdirektiven verwenden? -
-
Nun, das zu Hause zu machen ist nicht ganz ungefährlich. Sauerstoff und Wasserstoff als Gase zusammengebracht sind natürlich ein explosives Gemisch. Also lieber Hände weg davon.
-
progandy, du bist ein Schatz
Ich habe bei meinen Versuchenschon graue Haare bekommen. Jetzt kann ich endlich weiterbasteln.
Edit: Hmm, ich bekomme keine Handle, alles 0x00000000

Edit2: Das DirectorWindow-Handle wird zurückgegeben, nur die anderen nicht.
Ich hab das mal mit DependencyWalker angeschaut. 2 Dateien scheinen problematisch zu sein.Ist das die Ursache?
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.